1.什么是DML
Data Manipulation Language,数据操作语言,以INSERT、UPDATE、DELETE三种指令为核心,分别代表插入、更新与删除,是必须要掌握的指令,DML和SQL中的SELECT俗称CRUD(增删改查)。
2.插入
-
插入单行
方法1语法: INSERT INTO 表名 [(字段1,字段2,…)] VALUES (字段1的值,字段2的值,…);
举例: INSERT INTO stu (id,name
) VALUES (NULL, ‘Tom’);
方法2语法: INSERT INTO 表名 SET 字段1=值1, 字段2=值2, …; 不常用
举例: INSERT INTO stu SET id=NULL,name
=‘Jerry’; -
批量插入
方法1语法: INSERT INTO 表名 [(字段1,字段2,…)] VALUES (字段1的值,字段2的值,…),(字段1的值,字段2的值,…),…;
举例: INSERT INTO stu (id,name
) VALUES (NULL,‘Lucy’),(NULL, ‘Lily’);
方法2语法: INSERT INTO 表名 [(字段1,字段2,…)] 数据来源于后面到的SELECT语句;
举例1: INSERT INTO stu3 SELECT * FROM student; – 如果主键值一样会报错
举例2: INSERT INTO stu (id,name
) SELECT NULL,name
FROM student;
注意:
值和字段需要一一对应
如果是字符型或日期类型,值需要用单引号引起来;如果是数值类型,不需要用单引号
字段和值的个数必须一致,位置对应
字段如果不能为空,则必须插入值
可以为空的字段可以不用插入值,但需要注意:字段和值都不写;或字段写上,值用NULL代替
表名后面的字段可以省略不写,此时表示所有字段,顺序和表中字段顺序一致
3.更新
- 更新单表
语法: UPDATE 表名 [[AS] 别名] SET [别名.]字段 = 值,[别名.]字段 = 值 [WHERE条件];
举例: UPDATE stu SETname
=‘齐天大圣’ WHERE id=11; - 更新多表
语法: UPDATE 表1 [[AS] 别名1],表名2 [[AS] 别名2] SET [别名.]字段 = 值,[别名.]字段 = 值 [WHERE条件];
举例: UPDATE stu,stu3 SET stu.name
=‘汤姆’,stu3.name
=‘Tom’ WHERE stu.id
=1 OR stu3.id
=9; – 慎用,stu的name都改为汤姆,stu3的name都改为了Tom。要注意连接条件。
举例2: UPDATE stu,stu3 SET stu.name
=‘Tom’,stu3.name
=‘汤姆’ WHERE stu.id
=stu3.id
; – 可以达到预期效果
注意:
有些表名可能名称⽐较长,为了方便操作,可以给这个表名起个简单的别名,更方便操作。
如果没有别名的时候,表名就是别名。
推荐使用单表更新。
4.删除
-
单表删除
语法: DELETE [别名] FROM 表名 [[AS] 别名] [WHERE条件];
举例: DELETE FROM stu WHERE id = 14;
注意:
如果没有别名的时候,表名就是别名
如果有别名,delete后面必须写别名
如果没有别名,delete后面的别名可以省略不写。 -
多表删除
语法: DELETE [别名1,别名2] FROM 表1 [[AS] 别名1],表2 [[AS] 别名2] [where条件];
举例: DELETE stu,stu3 FROM stu,stu3 WHERE stu.id
=stu3.id
;
注意:
别名可以省略不写,但是需要在DELETE后面跟上表名,多个表名之间⽤逗号隔开。 -
使用 TRUNCATE
语法: TRUNCATE 表名:-- 相当于先删除表,然后再建一个一模一样结构的表
5. DROP/TRUNCATE/DELETE的区别
- DROP (删除表):删除数据内容和定义,释放空间。属于DDL,不能放入事务中回滚。
- TRUNCATE 只清空表中的数据,相当于删除表之后再建一个一模一样结构的表。属于DDL,不能放入事务中回滚。
- DELETE 用于删除表中的行。属于DML,可以放入事务中回滚。
- 删除速度 一般来说: DROP> TRUNCATE > DELETE