MySQL基础知识
通用语法
- Sql语句可以单行或者多行书写,但是必须以分号结束。只有以分号结束才是一个完整的Sql语句。
- Mysql数据库的语句不区分大小写,关键字建议大写,便于区分。
- 注释:
- 单行注释:- - 或者#
- 多行注释:/* 被注释内容*/
DDL
DDL(Data Definition Language) : 数据定义语言,用来定义数据库对象:数据库,表,列等
DDL简单理解就是用来操作数据库,表等
1 操作数据库
1.1 查询所有的数据库
1 | SHOW DATABASES; |
1.2 创建数据库
1 | CREATE DATABASE 数据库名称; |
1.3 删除数据库
知道存在,直接删除
1
DROP DATABASE 数据库名称;
不知道是否存在,添加判断语句。若存在,则删除
1
DROP DATABASE IF EXISTS 数据库名称;
1.4 使用数据库
1 | USE 数据库名称; |
1.5 查看当前数据库
1 | SELECT DATABASE(); |
2 操作表
2.1 查询当前数据库下所有的表
1 | SHOW TABLES; |
2.2 查询表结构
1 | DESC 表名称; |
2.3 创建表
1 | CREATE TABLE 表名 ( |
2.4 删除表:
知道存在,直接删除
1
DROP TABLE 表名;
不知道是否存在,添加判断语句。若存在,则删除
1
DROP TABLE IF EXISTS 表名;
2.5 修改表:
2.5.1 修改表名
1 | ALTER TABLE 表名 RENAME TO 新表名; |
2.5.2 添加列:
1 | ALTER TABLE 表名 ADD 添加的列名 添加的列的数据类型; |
2.5.3 修改列的数据类型
1 | ALTER TABLE 表名 MODIFY 列名 新的数据类型; |
2.5.4 同时修改列名和数据类型
1 | ALTER TABLE 表名 列名 新的数据类型; |
2.5.5 删除列
1 | ALTER TABLE 表名 DROP 列名; |
DML
DML(Data Manipulation Language) 数据操作语言,用来对数据库中表的数据进行增删改
DML简单理解就对表中数据进行增删改
1 添加数据
1.1 给指定列添加数据
1 | INSERT INTO 表名(列名1,列名2...) VALUES(值1,值2...); |
1.2 给全部列添加数据
1 | INSERT INTO 表名 VALUES(值1,值2...); |
1.3 批量添加数据
1 | INSERT INTO 表名(列名1,列名2...) |
2 修改数据
1 | UPDATE 表名 SET 列名1=值1, 列名2=值2, ... [WHERE 条件] |
3 删除数据:
1 | DELETE FROM 表名 [WHERE 条件] |
DQL
DQL(Data Query Language) 数据查询语言,用来查询数据库中表的记录(数据)
DQL简单理解就是对数据进行查询操作。从数据库表中查询到我们想要的数据。
1 基础查询
1 | SELECT 字段列表 FROM 表名; |
2 条件查询
1 | SELECT 字段列表 FROM 表名 WHERE 条件列表; |
下面为条件查询能够使用的运算符。
符号 功能 > 大于 < 小于 >= 大于等于 <= 小于等于 = 等于 <>或者!= 不等于 BETWEEN…AND… 在某个范围之间(前后都包含) IN(…) 多选一 满足其中一个即可 LIKE占位符 模糊查询 _单个任意字符 %多个任意字符 IS NULL 是NULL IS NOT NULL 不是NULL AND或&& 并且 OR或|| 或者 NOT或! 非,不是 模糊查询:就是查询只知道部分信息来查数据
3 排序查询
1 | SELECT 字段列表 FROM 表名 ORDER BY 排序字段名1 [排序方式],排序字段名2 [排序方式]...; |
排序方式有两种:
- ASC:升序排列 (默认值)
- DESC:降序排列
注意:如果有多个排序条件,当前面的条件值一样时,才会根据第二条件进行排序。
4 聚合函数
1 | SELECT 聚合函数名(列名) FROM 表; |
函数分类:
函数名 | 功能 |
---|---|
count(列名) | 统计数量(一般选用不为null的列) |
max(列名) | 最大值 |
min(列名) | 最小值 |
sum(列名) | 求和 |
avg(列名) | 平均值 |
注意:NULL值不参与所有聚合函数运算!!!
5 分组查询
1 | SELECT 字段列表 FROM 表名 [WHERE 分组前的限定条件] GROUP BY 分组字段名 [HAVING 分组后过滤条件] |
WHERE和HAVING的区别:
- 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
- 可判断的条件不一样:where 不能对聚合函数进行判断,having 可以。
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
6 分页查询
1 | SELECT 字段列表 FROM 表名 LIMIT 其实索引, 查询台条目数; |
索引计算公式:
1 | 起始索引 = (当前页码 - 1) * 每页显示的条数 |
约束
1 非外键约束
约束名称 | 描述 | 关键字 |
---|---|---|
主键约束 | 主键是一行数据的唯一标识,要求非空且唯一 | PRIMARY KEY |
唯一约束 | 保证列中的所有数据各不相同 | UNIQUE |
非空约束 | 保证列中所有数据不能有NULL值 | NOT NULL |
默认约束 | 保存数据时,未指定值则采用默认值 | DEFAULT |
2 外键约束
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。
外键约束 外键是用来让两个表之间建立连接,保证数据的一致性和完整性 FOREIGN KEY 添加约束
1
2
3
4
5
6-- 创建表时添加外键约束
CREATE TABLE 表名(
列名 数据类型,
...
[CONSTRAINT] [外键名] FOREIGN KEY(外键列名) REFERENCES 主表(主表列名)
);1
2--- 创建表后添加外键约束
ALTER TABLE 表名 DROP FOREIGN(外键列名) REFERENCES 主表(主表名称);删除约束
1
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
数据库设计
1 一对一
一对一关系多用于表拆分,将一个实体中经常出现的字段放一张表,不经常出现的字段放一张表。用于调高查询性能。
实现方法:在任意一方加入外键,关联另一方主键,并且设置外键为唯一约束(UNIQUE)。
例子:下图就是一对一的例子,我在tb_user_desc表中添加了一个外键。
tb_user用户表 (1) id name age sex 1 张三 33 男 2 李四 56 女 3 王五 34 男 tb_user_desc (1) id adder status user_id(添加的外键) 1 四川 单身 1 2 上海 离婚 2 3 广东 已婚 3
2 多对一
一个表的某一行数据对应这另一张表的多行数据。
实现方法:在多的一方建立外键,指向一的一方。
例子:一个部门对应多个员工,一个员工对应一个部门。我在tb_emp表中建立外键,指向tb_dept表。
tb_emp (m) id name age dept_id(添加的外键) 1 张三 23 1 2 李四 54 1 3 王五 34 2 tb_dept (1) dept_id dept_name adder 1 研发部 北京 2 销售部 成都
3 多对多
两张表互相有多行数据有关联。
实现方法:建立第三只张中间表,中间至少包含两个外键,分别是关联的是两张表的主键。
例子:书包和书的种类便是多对多,一个书包可以装不同种类的书。一种书可以装进不同的书包。我创建了第三张表,包含两个外键,分别指向tb_bag和tb_book的主键。
tb_bag (m) id name 1 甲 2 乙 tb_book (n) id name 1 语文 2 数学 3 英语 tb_book_bag (创建的第三张中间表) id tb_bag tb_book 1 1 1 2 1 2 3 2 3
多表查询
1 连接查询
1.1 内连接
查两张表的交集部分。
1 | -- 隐式内连接 |
1.2 外连接
1 | -- 左外连接 |
- 左外连接:相当于查询表1所有数据和交集部分数据。
- 右外连接:相当于查询表2所有数据和交集部分数据。
2 子查询
子查询就是查询中嵌套查询。
2.1 单行单列
- 作为条件值,使用 = , != , > , <等进行判断。
1 | SELECT 字段列表 FROM 表名 WHERE 字段名 = (子查询); |
2.2 多行单列
- 作为条件值,使用in等关键字进行条件判断。
1 | SELECT 字段列表 FROM 表名 WHERE 字段名 IN (子查询); |
2.3 多行多列
- 作为虚拟表。
1 | SELECT 字段列表 FROM (子查询) WHERE 条件; |
事务
1 四大特性
- 原子性:事务是不可分割的最小操作单元,要么同时成功,要么同时失败。
- 一致性:事务完成时,必须使所以的数据都保持一致状态。
- 隔离性:多个事务之间,操作的可见性。
- 持久行:事务一旦提交或回滚,它对数据的改变是永久的。
2 使用(常用)
2.1 开启事务
1 | START TRANSACTION; 或 BEGIN; |
2.2 提交事务
1 | COMMIT |
COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的.
2.3 回滚事务
1 | ROLLBACK; |
回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。