DML
DML(Data Manipulation Language),是通过对表中数据的插入、删除和修改等操作,实现对数据库的基本操作。
主要用途:对数据表进行数据插入、删除、修改、排序或检索操作。
操纵命令:INSERT、UPDATE、DELETE
INSERT:把数据插入到数据表中。
UPDATE:修改数据记录。
DELETE:删除数据库中不必再继续保留的记录。
1、插入数据
形式一
1 | INSERT INTO TABLE_NAME (字段名1,字段名2,.....) VALUES(数值1,数值2,....); |
形式二
1 | INSERT INTO TABLE_NAME SET 字段名1 = 数值1, 字段名2 = 数值2,....; |
2、修改数据
1 | UPDATE TABLE_NAME SET 字段名1 = 新数值1,字段名2 = 新数值2; |
3、解决重复记录的更新
使用on duplicate key update可以解决插入或更改重复主键,即当insert内容和原表内容存在重复记录时,执行update操作。
1 | INSERT INTO table_name1 SELECT * FROM table_name2 ON DUPLICATE KEY UPDATE column_name = VALUES(column_name); |
注意:在使用on duplicate key update时,表中必须要存在至少一个unique key或者primary key。
案例:
现有表v1和v2如下:
v1表与v2表同时存在id为005的行,且name字段值不一致。
我们使用on duplicate key update对v1表插入v2内容:
1 | insert into v1 select name,tel,remove from v2 on duplicate key update name = values(name); |
查看执行后的v1表内容,可以看到id为005的记录,其name字段值已修改为v2的相应记录:
4、删除数据
方法一:DELETE
1 | DELETE FROM TABLE_NAME |
方法二:TRUNCATE
TRUNCATE优势:作为DDL语句,比DELETE运行速度更快,且使用资源更少
1 | TRUNCATE TABLE TABLE_NAME |
5、数据库查询
5.1、基本查询语句
1 | SELECT column_name FROM table_name |
WHERE限制条件一览表:
限制条件类别 | 对应标识 | 备注 |
---|---|---|
比较 | >、<、=、>=、<=、<> | |
集合 | in、not in | 无法获取null值 |
指定范围 | between and | 使用时需注意其结果包含边界值 |
空值判断 | is null、is not null | |
且 | and | |
或 | or |
1 | 案例: |
别名
1 | column_name AS 别名 |
注:WHERE子句中不可使用别名
GROUP BY:用于对查询结果进行数据分组
HAVING:用于对分组后的结果进行统计,其后可以跟聚合函数
1 | 案例: |
HAVING语句用于对分组后的结果进行统计
ORDER BY:对查询结果进行排序,默认为ASC升序,DESC为降序
1 | 案例: |
DISTINCT:取消重复的结果
1 | 案例: |
5.2、模糊查询
LIKE
1 | SELECT column_name FROM table_name |
通配符 | 含义 |
---|---|
% | 匹配任意长度(0或多个)字符串,不能匹配空值 |
_ | 匹配任意单个字符串,_表示1个长度 |
1 | 案例: |
RLIKE、REGEXP
这两个主要用于在MYSQL中进行正则表达式的书写。
1 | SELECT column_name FROM table_name |
通配符 | 含义 |
---|---|
. | 匹配任意单个字符 |
* | 匹配0个或多个前一个得到的字符 |
^ | 匹配开头,如^s匹配以s或者S开头的字符串。 |
$ | 匹配结尾,如s$匹配以s结尾的字符串。 |
{n} | 匹配前一个字符反复n次。 |
| | 多个条件间的“或”连接 |
1 | 案例: |
5.3、存储过程
存储过程基本结构
1 | 构造存储过程: |
终端运行存储过程
1 | 案例: |
5.4、多表查询
内连接
1 | SELECT * FROM TABLE_A INNER JOIN TABLE_B |
内连接用于比较并返回满足连接条件的数据行,结果取交集。
inner join示意图:
注意:如果两边的表行数不一致,可能会出现丢失数据。
外连接
1 | SELECT * FROM TABLE_A LEFT|RIGHT|FULL JOIN TABLE_B |
外连接的两个表有主从之分,主表全部保存,从表适配保存。
full outer join示意图:
left/right outer join示意图:
6、锁表
1 | 锁表; |
Lock_type包含read和write等。
锁为read类型的表,可读但不可写;其他会话对该表可读,但写入需要等到解锁后:
锁为write类型的表,可读也可写;但其他会话对该表的读或写需要等到解锁以后:
7、MYSQL慢查询:EXPLAIN
explain语句用于分析MYSQL的查询性能,可以显示MySQL如何使用索引等来处理select语句以及连接表。
1 | 用explain查看查询是否使用索引: |
explain查询结果type为ref,即使用了索引查询,而非全表遍历查询all;所使用的索引(possible keys/key)为i1: