首頁技術(shù)文章正文

數(shù)據(jù)庫drop、delete、truncate的區(qū)別?【Java面試題】

更新時間:2022-08-05 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  1、刪除內(nèi)容:drop操作會刪除表結(jié)構(gòu)、依賴的約束、索引以及觸發(fā)器,并且會將依賴該表的所有存儲過程和視圖設(shè)置為invalid;而truncate和delete則是只會刪除表中的數(shù)據(jù),并不會刪除表結(jié)構(gòu)。因此如果該表以后不再需要的話可以使用drop,而如果后續(xù)還需要的話可以通過truncate或delete,因為這樣可以不需要再重新建立表。

  2、刪除空間:delete操作并不會更改所占用的區(qū)的空間,高水位線不會發(fā)生改變。drop操作就會直接刪除整個表空間,而執(zhí)行truncate則是相對于先執(zhí)行drop操作,然后在執(zhí)行create操作,執(zhí)行完成后會恢復(fù)初始的表空間。

  3、語句類型:delete 語句是DML語句,這個操作會放到 rollback segement 中,事務(wù)提交之后才生效;并且可以執(zhí)行對應(yīng)的觸發(fā)器。但truncate、drop是DDL操作,會包含implicit commit,因此不能回滾,也不能不觸發(fā)觸發(fā)器。

  4、效率:從第二點的描述中可以推斷truncate的執(zhí)行效率要低于drop操作;而delete操作則是按照行記錄一行一行的進行刪除,因此其效率更低。

  5、安全性:使用 drop 和 truncate會導(dǎo)致整個表中的數(shù)據(jù)都被刪除,需格外注意。如果僅想刪除部分?jǐn)?shù)據(jù)可用delete,但是需要注意where子句得到的范圍,會占用rollback segement。

分享到:
在線咨詢 我要報名
和我們在線交談!