DML資料操作語言
阿新 • • 發佈:2021-08-07
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前一定要再三檢查確認,最好提前備份下表資料。