
为什么我们需要学习数据库因为数据库是应用系统开发必备技能mysql是互联网应用使用最广泛的数据库。所以我们需要学习数据库相关知识。总之不管大家是因为什么原因学习MySQL相关知识我希望我的分享能够帮助到大家更好的学习mysql相关知识。一、数据库基本知识1、数据库相关概念数据库(DataBase)存储数据的仓库数据是有组织的进行存储。简称DB。数据库管理系统DataBase Management System模拟和管理数据库的大型软件。简称DBMS。SQL(Structured Query Language):操作关系型数据库的编程语言定义了一套操作关系型数据库统一标准。这三者的关系是程序员可以通过sql操作数据库管理系统实现增删改查数据库中的数据。关系型数据库RDBMS:建立在关系模型基础上由多张相互连接的二维表组成的数据库。巧记通过表存储数据的数据库就是关系型数据库关系型数据库的特点使用表存储数据且使用sql语句操作格式统一便于维护二、SQL语句相关知识1、SQL通用语法①SQL语句可以单行或多行书写以分号结尾②SQL语句可以使用空格或缩进增强语句的可读性③MySQL数据库的SQL语句不区分大小写关键字建议使用大写2.注释方法mysql的注释方法用两种单行注释和多行注释。单行注释--注释内容 或者#注释内容多行注释/注释内容/3.SQL语句的分类①DDL(Data Defintion Language):数据定义语句用来定义数据库对象数据库、表、字段②DMLData Manipulation Language:数据操作语句用来对数据库表中的数据进行增删改③DQL(Data Query Language):数据查询语句。用来查询数据库中表的记录④DCL(Data Control Language):数据控制语句用来创建数据库用户、控制数据库的访问权限。三.DDL——数据定义语句1.DDL——数据库操作查询所有数据库 show databases;使用数据库use 数据库名查询当前数据库select database();创建数据库create database [if not exists] 数据库名 [defaullt charset 字符集] [collate 排序规则] 注意事项创建语句中所有的中括号内容都可以省略删除数据库drop database [if exists] 数据库名2.DDL——数据库表查询操作查询当前数据库中所有表show tables;查询表结构: desc 表名查询指定表的建表语句show create table 表名3.DDL——数据库表创建操作create table 表名字段1 字段1类型 [comment 注释]字段2 字段2类型字段3 字段3类型注意事项中括号中的内容可省略4.DDL——数据库表操作中的数据类型Mysql中的数据类型有很多主要分为数值类型、字符串类型、日期类型。5.DDL——数据库表修改操作添加字段alter table 表名 add 字段名 类型长度修改表中数据类型alter table 表名 modify 字段名 新数据类型长度修改字段名和字段类型alter table 表名 change 旧字段名 新字段名 类型长度 删除字段alter table 表名 drop 字段名修改表名alter table 表名 rename to 新表名删除表第一种方法drop table 表名第二种方法删除指定表并重新创建新表truncate table 表名即将表中的数据清空四.DML——数据操作语句DML是数据操作语句用来对数据库中表的数据记录进行增删改操作。添加数据insert修改数据update删除数据delete1.DML——添加数据添加数据分为3类给指定字段添加数据(顺序是固定的)insert into 表名字段名1字段名2... values(值1值2,......)给全部字段添加数据insert into 表名 values 值1值2...;批量添加数据insert into 表名字段名1字段名2....values (值1值2...),(值1值2...);insert into 表明 values(值1值2...),(值1值2...);注意事项如果一次性添加多条数据则每条数据之间用逗号隔开。2.DML——修改数据修改数据update 表名 set 字段名1值1字段名2值2...[where 条件];这个语句如果写了where语句那么就先判断条件是否满足如果满足where条件那么就执行update语句。如果没有写where语句就更新写出的字段名。注意事项如果一次性修改多个数据那么每个数据之间用逗号隔开。3.DML——删除数据删除数据delete from 表名 [where 表名]注意事项条件可有可无如果没有条件则会删除整张表中的所有数据。delete语句不能删除某一个字段的值。五、DQL——数据库查询语句DQL是数据查询语句用来查询数据库中表的记录。DQL语法select 字段列表 from 表名列表 基本查询where 条件列表 条件查询group by 分组字段列表聚合函数查询分组查询having 分组后条件列表order by 排序字段列表 排序查询limit 分页参数分页查询1.基本查询查询多个字段select 字段1字段2... from 表名查询表中的全部信息select * from 表名*设置别名select 字段1 [as 别名1]字段2[as 别名2]... from 表名去除重复记录select distinct 字段列表 from 表名2.条件查询条件查询语法select 字段列表 from 表名 where 条件列表查询学生表中学号在001到003之间的学生信息查询学生表中学生名称长度为6的学生信息查询学生表中学生名称最后两个字母为“hu”的学生信息3.聚合函数聚合函数定义将一列数据作为一个整体进行纵向计算。常见的聚合函数count统计数量max最大值min最小值avg平均值sum求和4.分组查询group by语法select 字段列表 from 表名 [where 条件] group by 分组字段名 [having 分组后过滤条件]语法中where与having的区别执行时机不同where是分组之前进行过滤不满足where条件不参与分组而having是分组之后对结果进行过滤。判断条件不同where不能对聚合函数进行判断但having可以。注意事项执行顺序where聚合函数having分组之后查询的字段一般为聚合函数和分组字段查询其他字段往往无意义。5.排序查询order by语法select 字段列表 from 表名 order by 字段1 排序方式1字段2 排序方式2排序方式asc 升序默认desc降序注意事项如果是多个字段排序当前一个字段值相同时才会根据第二个字段进行排序。按照年龄升序id降序查询表中的数据6.分页查询limit作用是限制查询结果返回多少条记录以及从那一条开始返回语法select 字段列表 from 表名 limit [起始索引]查询记录数六、DCL——数据控制语句DCL用来管理数据库用户控制数据库的访问权限。1.查询用户在mysql数据库中所有用户的权限信息都存储在系统数据库mysql中的user表中查询用户的语法use mysqlselect * from user2.创建用户创建用户语法create user ‘用户名’ ‘用户名’ identified by ‘密码’ 注意事项在创建用户名的时候主机名localhost只能在本机访问数据库主机名%则在任何主机上都可以访问数据库。3.修改用户密码修改用户密码语法alter user ‘用户名’‘主机名’ identified with mysql_native_password by 新密码4.删除用户删除用户密码drop user 用户名“主机名”5.权限控制查询用户权限语法show grants for “用户名”“主机名”给用户授予权限语法grant 权限列表 on 数据库名 表名 to 用户名“主机名”;数据库名和表名都可以用*进行通配表示所有。给xincun这个用户授予mysql数据库中所有表的所有权限为用户撤销权限语法revoke 权限列表 on 数据库名 表名 from “用户名”“主机名”七、多表查询在学习过程中因为没有合适的数据库表结构所以就不做演示了。如果后期遇到多表查询会补齐演示内容。1.多表关系项目开发中数据库表结构设计会根据业务需求分析并设计表结构由于业务之间互相联系。所以每个表之间存在各种联系大致分为一对多、多对多、一对一。多表关系概述一对多实现在多的一方建立外键指向“一”的一方的主键。 情况举例在实际开发中一个部门对应多个员工。多对多实现建立第三张中间表中间表至少包含两个外键分别关联两方主键。情况举例在实际开发中一个学生可以选择多门课程一门课程可以对应多个学生。一对一实现在任意一方加入外键关联另外一方的主键并且设置外键为唯一的。 情况举例一对一关系多用于单表的拆分将一张表的基础字段放到一张表中其他字段放到另外一张表中从而提升操作效率。基本概念概述 笛卡尔积笛卡尔积是指在数学中两个集合A和B集合的所有组合情况。在多表查询时需要消除无效的笛卡尔积多表查询的分类连接查询内连接相当于查询A、B交集部分数据。外连接左外连接查询左表所有数据以及两张表交集部分数据。右外连接查询右表所有数据以及两张表交集部分数据。自连接当前表语自身的连接查询自连接必须使用表别名。子查询2.连接查询——内连接内连接查询的是两张表中交集的部分。内连接查询方法分两种隐式内连接和显示内连接隐式内连接select 字段列表 from 表1表2 where 条件...显示内连接select 字段列表 from 表1 [inner] join 表2 on 连接条件...3.连接查询——外连接外连接查询分为两种左外连接和右外连接查询左外连接语法select 字段列表 from 表1 left [outer] join 表2 on 条件左外连接查询的是左表的数据同时包含左表和右表的交集部分数据。自己总结左外连接的使用场景在查询过程中要将左表的数据全部与另一张表的数据对应即使左表的数据不完整也得将查询结果展示出来。右外连接语法select 字段列表 from 表1 right [outer] join 表2 on 条件右外连接查询的是右表的数据同时包含左表和右表的交集部分数据。自己总结右外连接的使用场景在查询过程中要将右表的数据全部与另一张表的数据对应即使右表的数据不完整也得将查询结果展示出来。***4.连接查询——自连接自连接指的是一张表自己连接自己用于查询自己的数据。自连接语法select 字段列表 from 表1 as 别名1 join 表1 as 别名2 on 条件...自连接查询可以是内连接查询也可以是外连接查询。自己总结自连接查询的使用时机需要查询的数据都在同一张表里面。技巧:这个时候将一张表分别对应的别名看作两张表操作。5.连接查询——联合查询unionunion all联合查询就是将多次查询的结果合并起来形成一个新的查询结果。联合查询的语法select 字段列表 from 表1 ....union [all]select 字段列表 from 表2...这个语法结构会将两条查询语句的结果整合组成一个新的结果。注意事项使用联合查询的多张表多张表的列数必须保持一致字段类型也需要保持一致。并且返回字段个数必须一致。如果联合查询使用的关键字是union all 那么只是将两条语句查询的结果直接拼接在一起不会进行去重操作。如果联合查询使用的关键字是union那么在将两条语句查询结果拼接在一起会进行去重操作。5.连接查询——子查询子查询概念SQL语句中嵌套select语句视为嵌套查询又称为子查询。语法select * from 表1 where column1select column from 表2子查询中的语句可以是insert、update、delete、select中的任何一个。根据子查询结果不同分为标量子查询子查询结果为单个值列子查询子查询结果为一列行子查询子查询结果为一行表子查询查询结果为多行多列。根据子查询位置分为where之后、from之后、select之后。接下来将会详细介绍不同类型的子查询标量子查询子查询返回的结果是单个值数字、字符串、日期等最简单的形式这种子查询称为标量子查询。常用的操作符 列子查询子查询返回的结果是一列可以是多行这种子查询称为列子查询。常用的操作符innot in、any、some、all行子查询子查询返回的结果是一行可以是多列这种子查询称为行子查询。常用的操作符 、 、in、not in表子查询子查询返回的结果是多行多列这种子查询称为表子查询。常用的操作符in