mysql - DML语句
dml:数据库操作语言
插入:insert 修改:update 删除:delete
插入语句
-
方式一:经典插入
insert into 表名 (列名,...) values(值1,...); insert into students(name,hometown,birthday) values('黄蓉','桃花岛','2016-3-2'); insert into 表名 values (...) insert into students values(0,’郭靖‘,1,'蒙古','2016-1-2'); insert into 表名 values(...),(...)...; insert into classes values(0,'python1'),(0,'python2');
注意: 1. 值类型与列类型一致 2. 可以为NULL的列,不写列字段则不写value / 写列字段则value写NULL 3. 列数与值个数一致 4. 可以省略列名,默认所有列 5. 可以插入同时多行 6. 支持子查询 INSERT INTO user_t(username,age,sex,address)(SELECT username,age,sex,address FROM user_t WHERE id=16)
-
方式二:(不推荐)
insert into 表名 set 列名=值,列名=值,...
特点: 1. 不支持多行插入 2. 不支持子查询
修改语句
-
单表修改:
update 表名 set 列=新值,列=新值,... where 筛选条件;
-
多表修改:
-- sql92: update 表1 别名,表2 别名 set 列=值,... where 连接条件 and 筛选条件; -- sql99: update 表1 别名 inner|left|right join 表2 别名 on 连接条件 set 列=值,... where 筛选条件;
删除语句
-
单表删除:
delete from 表名 where 筛选条件;
-
多表删除:
-- sql92语法: delete 表1的别名,表2的别名 from 表1 别名,表2 别名 where 连接条件 and 筛选条件; -- sql99语法: delete 表1的别名,表2的别名 from 表1 别名 inner|left|right join 表2 别名 on 连接条件 where 筛选条件;
delete PK truncate
- truncate
truncate table类似于delete删除所有行的语句或drop table然后再create table语句的组合,尽管truncate table与delete相似,但它被分类为DDL语句而不是DML语句
truncate table 表名;
- 对比:
- delete 可以加where 条件,truncate不能加
- truncate删除,效率高一丢丢
- 假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始。
- truncate删除没有返回值,delete删除有返回值 (truncate信息为受影响的行0)
- truncate删除不能回滚,delete删除可以回滚。