MySQL中除了DELETE語句可以刪除數(shù)據(jù)外,在MySQL中還可以利用TRUNCATE清空指定數(shù)據(jù)表中的所有數(shù)據(jù)。執(zhí)行語句是
TRUNCATE [table] 表名
需要注意的是,TRUNCATE操作雖然與DELETE非常相似,但是兩者在本質(zhì)上有一定的區(qū)別,具體如下。
實現(xiàn)方式不同:truncate本質(zhì)上先執(zhí)行刪除(DROP)數(shù)據(jù)表的操作,然后在根據(jù)有效的表結(jié)構(gòu)文件(.frm)重新創(chuàng)建數(shù)據(jù)表的方式來實現(xiàn)數(shù)據(jù)清空操作。而DELETE語句則是逐條的刪除數(shù)據(jù)表中保存的記錄。
執(zhí)行效率不同:在針對大型數(shù)據(jù)表(如千萬級的數(shù)據(jù)記錄)時,TRUNCATE清空數(shù)據(jù)的實現(xiàn)方式?jīng)Q定了它比DELETE語句刪除數(shù)據(jù)的方式執(zhí)行效率更高。
對AUTO_INCREMENT的字段影響不同:TRUNCATE清空數(shù)據(jù)后,再次向表中添加數(shù)據(jù),自動增長字段會從默認(rèn)的初始值開始,而使用DELETE語句刪除表中的數(shù)據(jù)時,則不影響自動增長值。
刪除數(shù)據(jù)的范圍不同:TRUNCATE語句只能清空表中所有記錄,而DELETE語句可通過WHERE指定刪除滿足條件的部分記錄。
返回值含義不同:TRUNCATE操作的返回值一般是無意義的,而DELETE語句則會返回符合條件被刪除的記錄數(shù)。
所屬SQL語言的不同組成部分:DELETE語句數(shù)據(jù)DML數(shù)據(jù)操作語句,而TRUNCATE通常被認(rèn)為是DDL數(shù)據(jù)定義部分。
拓展:
數(shù)據(jù)定義語言(Data Definition Language,DDL),用于定義和管理對象,例如數(shù)據(jù)庫、數(shù)據(jù)表以及視圖,例如:CREATE、DROP、ALTER等語句。
數(shù)據(jù)操作語言(Data Manipulation Language,DML),用于操作數(shù)據(jù)庫對象所包含的數(shù)據(jù),例如:INSERT(插入)、UPDATE(修改)、DELETE(刪除)語句。
數(shù)據(jù)查詢語言(Data Query Language,DQL),例如:SELECT語句。
數(shù)據(jù)控制語言(Data Control Language,DCL),用于控制對數(shù)據(jù)庫對象操作的權(quán)限,例如:GRANT、REVOKE、COMMIT、ROLLBACK等語句。