Data Manipulation Language 数据操纵语言
关键字:INSERT、UODATE、DELETE(TRUNCATE)
1.insert插入
语法:
- 1)插入单行
INSERT INTO 表名(字段1,字段2...) VALUES|VALUE(值1,值2...);
- 2)插入多行:
/*方式1:直接插入*/
INSERT INTO 表名(字段1,字段2...) VALUES(值1,值2...),(值1,值2...)...;
/*方式2:从其他列表插入*/
INSERT INTO 表名(字段1,字段2...)
SELECT 值列表 UNION [ALL]
SELECT 值列表 UNION [ALL]
...
SELECT 值列表;
注意:
- 1)字段列表和值列表要一一对应,包含:个数、类型、约束
- 2)整型、bool型的值,可以不用单引号,其他类型的值要求使用单引号
- 3)字段顺序无要求
- 4)可以省略字段列表,此时值列表默认插入所有字段,顺序与字段定义一致
- 5)特殊情况
- 如果该字段可以为空,则插入时,可以使用null值填充,或直接字段和值都不写
- 如果该字段是自增长列,则插入时,可以使用null值填充,或直接字段和值都不写
- 如果该字段有默认值,则插入时,可以使用default值填充,或直接字段和值都不写
自增长列:auto_increment
- 默认从1开始,步长为1
- 1、自增长列要求设置的字段类型为数值型
- 2、自增长列要求必须和键搭配使用
- 3、一个表中最多有一个自增长列
- 4、主键如果是自增长列(非空),添加记录时,可以选填
1)子增长列默认情况下递增间隔是1,若想按照1、3、5…这样顺序递增,方法是在创建语句前增加这样的语句:
set global auto_increment_increment =2;
2)在MySQL中如果想实现001、002、003…这样的自增效果:
create table tablename (
id int(3) unsigned zerofill auto_increment primary key
);
2.update 更新
1)单表更新语法:
UPDATE 表名 SET 字段名 = 新值,字段名 = 新值,... WHERE 筛选条件;
2)多表更新:
UPDATE boys b
JOIN beauty g
ON b.id = g.boyfriend_id
SET g.borndate = '1990-01-01'
WHERE b.boyName = '张无忌';
或
update 表名 别名,表名 别名
set 字段名=新值,字段名 = 新值
where 连接条件
and 筛选条件
3.delete、truncate 删除
方式1:DELETE语句
1.单表删除★
deletefrom 表名 where 筛选条件;
2.多表级联删除:可以通过delete子句选择需要删除记录的表
delete 别名1,别名2
from 表 别名1,表 别名2
where 连接条件 and 筛选条件;
方式2:truncate[属于DDL]
语法:
truncate table 表名;
面试题:delete和truncate的对比
1、DELETE语句,可以添加WHERE条件,支持部分删除
TRUNCATE语句,不能添加WHERE条件,只能全部删除
2、DELETE语句,可以返回受影响的行数
TRUNCATE语句,不能返回受影响的行数
3、TRUNCATE的效率较高
4、DELETE 删除带自增长列的表,重新插入数据时,自增长列的值从断点处继续
TRUNCATE删除带自增长列的表,重新插入数据时,自增长列的值从1开始
5、DELETE支持事务回滚
TRUNCATE不支持事务回滚。
原理:
- truncate属于DDL,删除是表级操作:先删除表,再创建一个新表;
- delete属于DML,删除是行级操作:删除表中指定的记录;