更新時(shí)間:2016年09月26日09時(shí)44分 來(lái)源:傳智播客Java培訓(xùn)學(xué)院 瀏覽次數(shù):
1.truncate和不帶where子句的delete、以及drop都會(huì)刪除表內(nèi)的數(shù)據(jù)。
2.drop、truncate都是DDL語(yǔ)句(數(shù)據(jù)定義語(yǔ)言),執(zhí)行后會(huì)自動(dòng)提交。
不同點(diǎn):
1. truncate 和 delete 只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu)(定義)
drop 語(yǔ)句將刪除表的結(jié)構(gòu)被依賴的約束(constrain)、觸發(fā)器(trigger)、索引(index);依賴于該表的存儲(chǔ)過(guò)程/函數(shù)將保留,但是變?yōu)?invalid 狀態(tài)。
2. delete 語(yǔ)句是數(shù)據(jù)庫(kù)操作語(yǔ)言(dml),這個(gè)操作會(huì)放到 rollback segement 中,事務(wù)提交之后才生效;如果有相應(yīng)的 trigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā)。
truncate、drop 是數(shù)據(jù)庫(kù)定義語(yǔ)言(ddl),操作立即生效,原數(shù)據(jù)不放到 rollback segment 中,不能回滾,操作不觸發(fā) trigger。
3.delete 語(yǔ)句不影響表所占用的 extent,高水線(high watermark)保持原位置不動(dòng)
drop 語(yǔ)句將表所占用的空間全部釋放。
truncate 語(yǔ)句缺省情況下見(jiàn)空間釋放到 minextents個(gè) extent,除非使用reuse storage;truncate 會(huì)將高水線復(fù)位(回到最開(kāi)始)。
4.速度,一般來(lái)說(shuō): drop> truncate > delete
5.安全性:小心使用 drop 和 truncate,尤其沒(méi)有備份的時(shí)候.否則哭都來(lái)不及
使用上,想刪除部分?jǐn)?shù)據(jù)行用 delete,注意帶上where子句. 回滾段要足夠大.
想刪除表,當(dāng)然用 drop
想保留表而將所有數(shù)據(jù)刪除,如果和事務(wù)無(wú)關(guān),用truncate即可。如果和事務(wù)有關(guān),或者想觸發(fā)trigger,還是用delete。
如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導(dǎo)入/插入數(shù)據(jù)。
6.delete是DML語(yǔ)句,不會(huì)自動(dòng)提交。drop/truncate都是DDL語(yǔ)句,執(zhí)行后會(huì)自動(dòng)提交。
7、TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語(yǔ)句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統(tǒng)和事務(wù)日志資源少。DELETE 語(yǔ)句每次刪除一行,并在事務(wù)日志中為所刪除的每行記錄一項(xiàng)。TRUNCATE TABLE 通過(guò)釋放存儲(chǔ)表數(shù)據(jù)所用的數(shù)據(jù)頁(yè)來(lái)刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁(yè)的釋放。
8、TRUNCATE TABLE 刪除表中的所有行,但表結(jié)構(gòu)及其列、約束、索引等保持不變。新行標(biāo)識(shí)所用的計(jì)數(shù)值重置為該列的種子。如果想保留標(biāo)識(shí)計(jì)數(shù)值,請(qǐng)改用 DELETE。如果要?jiǎng)h除表定義及其數(shù)據(jù),請(qǐng)使用 DROP TABLE 語(yǔ)句。
9、對(duì)于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應(yīng)使用不帶 WHERE 子句的 DELETE 語(yǔ)句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發(fā)器。
10、TRUNCATE TABLE 不能用于參與了索引視圖的表。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://metathetuscanyresort.com/javaee
北京校區(qū)