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