1. 程式人生 > 其它 >DML資料操作語言

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前一定要再三檢查確認,最好提前備份下表資料。