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 表名;
    
  • 对比:
    1. delete 可以加where 条件,truncate不能加
    2. truncate删除,效率高一丢丢
    3. 假如要删除的表中有自增长列,如果用delete删除后,再插入数据,自增长列的值从断点开始,而truncate删除后,再插入数据,自增长列的值从1开始。
    4. truncate删除没有返回值,delete删除有返回值 (truncate信息为受影响的行0)
    5. truncate删除不能回滚,delete删除可以回滚。