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

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

更新時(shí)間:2022-08-05 來(lái)源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

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

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

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

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

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

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!