中國農村建設網站關于進一步優(yōu)化
三、MySQL 高級(DML 增刪改)
3.1 DML 數據操縱語言
DML(Data Manipulation Language)DML對數據庫中表記錄的執(zhí)行操作
-
插入(INSERT)
-
插入單行數據
-
插入多行數據
-
將查詢結果插入到新表
-
-
更新(UPDATE)
-
刪除(DELETE)
軟件開發(fā)人員日常使用最頻繁的操作,必備技能!!!
3.2 插入數據
- INSERT 一次向表中插入一條記錄
INSERT INTO 表名 [(字段名列表)] VALUES (值列表);
# 增
INSERT into gradeinfo (grade) VALUES ('ACCP');
字段名是可選的,如省略,則依次插入所有字段
多個列表和多個值之間使用逗號分隔
值列表和字段名列表一 一對應
如果插入表中的部分字段數據,則字段名列表必填
每個數據值的數據類型、精度和小數位數必須與相應的列匹配
不能為標識列指定值(主鍵)
如果在設計表的時候就指定了某列不允許為空,則必須插入數據
如果字段具有默認值,可以使用
DEFAULT
關鍵字來代替插入的數值
- INSERT 一次向表中插入多行數據
INSERT INTO 表名 [(字段名列表)] VALUES (值列表1), (值列表2), (值列表n);
# 增
INSERT INTO gradeinfo (grade) VALUES ('ACCP'),('BCSP');
為避免表結構發(fā)生變化引發(fā)的錯誤,建議插入數據時寫明具體字段名!
- INSERT 將查詢結果插入到新表
INSERT INTO 表名(字段1,字段2 , ……) SELECT 字段1,字段2 , …… FROM 原表;
# 事先創(chuàng)建且與插入數據字段相符
CREATE TABLE patient_address (SELECT patientName, address FROM patient ) ;
# 無須事先創(chuàng)建
如果新表已存在,將會報錯!
3.3 更新數據
- UPDATE 更新數據記錄
UPDATE 表名 SET 字段1=值1, 字段2=值2, …, 字段n=值n [WHERE 條件];
# 更新表數據
UPDATE gradeinfo SET gradeinfo.grade='BCSP' WHERE gradeinfo.id=2;
3.4 刪除數據
- DELETE 刪除數據記錄
DELETE FROM 表名 [WHERE條件];
# 刪除表信息
DELETE FROM patient WHERE patientID =1
DELETE條件刪除語句中,如果未指定WHERE條件語句,則將刪除表中的所有數據
DELETE FROM gradeinfo WHERE gradeinfo.id=1;
- TRUNCATE 格式化表記錄
TRUNCATE TABLE 表名;
# 格式化表
TRUNCATE TABLE gradeinfo;
使用 TRUNCATE 語句刪除表中記錄后,將重置自增列,表結構及其字段、約束、索引保持不變,執(zhí)行速度比 DELETE 語句快
3.5 比較 DROP、DELETE 與 TRUNCATE 語句
DROP | DELETE | TRUNCATE | |
---|---|---|---|
類型 | DDL 會隱式提交,不能回滾 | DML 每次從表中刪除一行數據的同時將改行的刪除操作記錄在redo和undo表空間中,以便進行回滾和重做操作 需要手動提交操作才能生效,可通過ROLLBACK撤銷操作 | DDL 會隱式提交,不會記錄日志,不能回滾 |
功能 | 刪除表結構及所有數據,并將標所占用的空間全部釋放 | 可根據條件刪除表中滿足條件的數據,如果不指定WHERE子句,則刪除表中所有記錄 | 刪除表中所有記錄,并將重建表結構 |
-
執(zhí)行速度
- 一般來說,DROP>TRUNCATE>DELETE
-
使用 DROP、TRUNCATE 語句時,要慎重
-
如果使用 DELETE 語句刪除表中部分數據要帶上 WHERE 子句,且要注意表空間要足夠大
-
如果要刪除表,使用 DROP 語句
-
如果要保留表但刪除表中所有數據,如果與事務無關可以使用 TRUNCATE 語句
-
如果與事務有關,則使用 DELETE 語句