DML数据操作语言

DML(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据); INSERT、 UPDATE、 DELETE
DML是对表中的数据进行增、删、改的操作。

1、INSERT语句

​ 用于向表中插入新记录

  • 语法:

    • INSERT INTO table_name VALUES (value1,value2,value3,...) # 无需指定列名可以插入多行VALUES
    • INSERT INTO table_name (column1,,column2,column3,...) VALUES (value1,value2,value3,...) # 需要指定插入的列名
  • 示例

    # 无需指定列名
    mysql> insert into user values (1,"张三",25,"男");
    Query OK, 1 row affected (0.00 sec)
    # 查询数据
    mysql> select * from user;
    +------+--------+------+--------+
    | id   | name   | age  | gender |
    +------+--------+------+--------+
    |    1 | 张三   |   25 | 男     |
    +------+--------+------+--------+
    1 row in set (0.01 sec)
    
    # 插入多条数据
    mysql> insert into user values (3,"赵武",25,"男"),(4,"小六",20,"男");
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> select * from user;
    +------+--------+------+--------+
    | id   | name   | age  | gender |
    +------+--------+------+--------+
    |    1 | 张三   |   25 | 女     |
    |    2 | 李四   |   30 | 女     |
    |    3 | 赵武   |   25 | 男     |
    |    4 | 小六   |   20 | 男     |
    +------+--------+------+--------+
    4 rows in set (0.00 sec)
    
    # 指定具体列名
    mysql> insert into user (id,name) values (2,"李四");
    Query OK, 1 row affected (0.00 sec)
    # 查询数据
    mysql> select * from user;
    +------+--------+------+--------+
    | id   | name   | age  | gender |
    +------+--------+------+--------+
    |    1 | 张三   |   25 | 男     |
    |    2 | 李四   | NULL | NULL   |
    +------+--------+------+--------+
    2 rows in set (0.00 sec)
    

2、UPDATE语句

​ 用于更新表中的记录

  • 语法

    • UPDATE table_name SET column1=value1,column2=value2,...
    • UPDATE table_name SET column1=value1,column2=value2,... WHERE some_column=some_value
  • 示例

    # 无条件修改所有数据
    mysql> update user set gender="女";
    Query OK, 2 rows affected (0.00 sec)
    Rows matched: 2  Changed: 2  Warnings: 0
    
    mysql> select * from user;
    +------+--------+------+--------+
    | id   | name   | age  | gender |
    +------+--------+------+--------+
    |    1 | 张三   |   25 | 女     |
    |    2 | 李四   | NULL | 女     |
    +------+--------+------+--------+
    2 rows in set (0.00 sec)
    
    # 带条件修改数据
    mysql> update user set age=30 where id=2;
    Query OK, 1 row affected (0.01 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from user;
    +------+--------+------+--------+
    | id   | name   | age  | gender |
    +------+--------+------+--------+
    |    1 | 张三   |   25 | 女     |
    |    2 | 李四   |   30 | 女     |
    +------+--------+------+--------+
    2 rows in set (0.01 sec)
    

3、DELETE语句

​ 用于删除表中的记录

  • 语法

    • DELETE FROM table_name # 删除表中所有数据
    • DELETE FROM table_name WHERE column=value # 根据条件删除
    mysql> delete from user where name="赵武";
    Query OK, 1 row affected (0.01 sec)
    
    mysql> select * from user;
    +------+--------+------+--------+
    | id   | name   | age  | gender |
    +------+--------+------+--------+
    |    1 | 张三   |   25 | 女     |
    |    2 | 李四   |   30 | 女     |
    |    4 | 小六   |   20 | 男     |
    +------+--------+------+--------+
    3 rows in set (0.00 sec)
    

4、TRUNCATE语句

​ truncate的作用是清空表或者说是截断表,只能作用于表

  • 语法

    • truncate table tab_name #删除数据,并保留表结构,又会自动缩减数据文件的大小
    • truncate tab_name
  • truncate与drop,delete的对比

    • truncate与drop是DDL语句,执行后无法回滚;delete是DML语句,可回滚。
    • truncate只能作用于表;delete,drop可作用于表、视图等。
    • truncate会清空表中的所有行,但表结构及其约束、索引等保持不变;drop会删除表的结构及其所依赖的约束、索引等。
    • truncate会重置表的自增值;delete不会。
    • truncate不会激活与表有关的删除触发器;delete可以。
    • truncate后会使表和索引所占用的空间会恢复到初始大小;delete操作不会减少表或索引所占用的空间,drop语句将表所占用的空间全释放掉。
  • truncate使用场景及注意事项

    ​ 表数据完全不需要时可以用truncate。如果想删除部分数据用delete,注意带上where子句;如果想删除表,当然用drop;如果想保留表而将所有数据删除且和事务无关,用truncate即可;如果和事务有关,或者想触发trigger,还是用delete;如果是整理表内部的碎片,可以用truncate然后再重新插入数据。

    • truncate无法通过binlog回滚。
    • truncate会清空所有数据且执行速度很快。
    • truncate不能对有外键约束引用的表使用。
    • 执行truncate需要drop权限,不建议给账号drop权限。
    • 执行truncate前一定要再三检查确认,最好提前备份下表数据。
上一篇:数据结构 题解


下一篇:mysqldump备份mysql数据库