DELETE語(yǔ)句和TRUNCATE語(yǔ)句都可以用來(lái)刪除表中的數(shù)據(jù),但它們之間有一些重要的區(qū)別:
DELETE語(yǔ)句是一條DML(數(shù)據(jù)操作語(yǔ)言)語(yǔ)句,它會(huì)逐行地刪除表中的數(shù)據(jù),并且可以使用WHERE子句來(lái)指定要?jiǎng)h除的行。DELETE語(yǔ)句執(zhí)行后,表的空間不會(huì)被釋放,而是會(huì)留下空的行。
TRUNCATE語(yǔ)句是一條DDL(數(shù)據(jù)定義語(yǔ)言)語(yǔ)句,它會(huì)立即刪除表中所有的數(shù)據(jù),且不能使用WHERE子句。TRUNCATE語(yǔ)句執(zhí)行后,表的空間會(huì)被釋放,且表的自增主鍵值會(huì)被重置。
DELETE語(yǔ)句可以回滾,即可以通過(guò)ROLLBACK語(yǔ)句來(lái)撤銷刪除操作;而TRUNCATE語(yǔ)句不可以回滾。
DELETE語(yǔ)句在刪除數(shù)據(jù)時(shí)會(huì)觸發(fā)表的相關(guān)觸發(fā)器,而TRUNCATE語(yǔ)句不會(huì)觸發(fā)觸發(fā)器。
總的來(lái)說(shuō),如果只是想刪除表中的數(shù)據(jù)而不需要釋放表的空間,可以使用DELETE語(yǔ)句;如果要?jiǎng)h除所有數(shù)據(jù)并釋放表的空間,可以使用TRUNCATE語(yǔ)句。