DROP TABLE、TRUNCATE TABLE和DELETE的区别
相同點(diǎn)
TRUNCATE TABLE和DELETE都可以刪除整個(gè)數(shù)據(jù)庫(kù)表的記錄
不同點(diǎn)
DELETE
DML語(yǔ)言
可以回退
可以有條件的刪除
DELETE FROM 表名 WHERE 條件
TRUNCATE TABLE
DDL語(yǔ)言
無(wú)法回退
默認(rèn)所有的表內(nèi)容都刪除
刪除速度比delete快
TRUNCATE TABLE 表名
DROP TABLE
用于刪除表(表的結(jié)構(gòu)、屬性以及索引也會(huì)被刪除);
DROP TABLE 表名
原理
DDL(Data Definition Language)數(shù)據(jù)定義語(yǔ)言,DML(Data Manipulation Language)數(shù)據(jù)操作語(yǔ)言。
- TRUNCATE在各種表上無(wú)論是大的還是小的都非常快。如果有ROLLBACK命令Delete將被撤銷,而TRUNCATE則不會(huì)被撤銷。
- TRUNCATE是一個(gè)DDL語(yǔ)言,向其他所有的DDL語(yǔ)言一樣,他將被隱式提交,不能對(duì)TRUNCATE使用ROLLBACK命令。
- TRUNCATE將重新設(shè)置高水平線和所有的索引。在對(duì)整個(gè)表和索引進(jìn)行完全瀏覽時(shí),經(jīng)過(guò)TRUNCATE操作后的表比Delete操作后的表要快得多。
- TRUNCATE不能觸發(fā)任何Delete觸發(fā)器。
- 當(dāng)表被清空后表和表的索引講重新設(shè)置成初始大小,而delete則不能。
- 不能清空父表。
優(yōu)化
在數(shù)據(jù)庫(kù)里,使用delete刪除數(shù)據(jù)以后,數(shù)據(jù)庫(kù)的存儲(chǔ)容量不會(huì)減少,而且使用delete刪除某個(gè)表的數(shù)據(jù)以后,查詢這張表的速度和刪除之前一樣,不會(huì)發(fā)生變化。
因?yàn)閿?shù)據(jù)庫(kù)有一個(gè)HWM高水位,它是oracle的一個(gè)表使用空間最高水位線。當(dāng)插入了數(shù)據(jù)以后,高水位線就會(huì)上漲,但是如果你采用delete語(yǔ)句刪除數(shù)據(jù)的話,數(shù)據(jù)雖然被刪除了,但是高水位線卻沒(méi)有降低,還是你剛才刪除數(shù)據(jù)以前那么高的水位。除非使用truncate刪除數(shù)據(jù)。那么,這條高水位線在日常的增刪操作中只會(huì)上漲,不會(huì)下跌,所以數(shù)據(jù)庫(kù)容量也只會(huì)上升,不會(huì)下降。而使用select語(yǔ)句查詢數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)會(huì)掃描高水位線以下的數(shù)據(jù)塊,因?yàn)楦咚痪€沒(méi)有變化,所以掃描的時(shí)間不會(huì)減少,所以才會(huì)出現(xiàn)使用delete刪除數(shù)據(jù)以后,查詢的速度還是和delete以前一樣。
轉(zhuǎn)載于:https://www.cnblogs.com/lanbosm/articles/8714688.html
總結(jié)
以上是生活随笔為你收集整理的DROP TABLE、TRUNCATE TABLE和DELETE的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: USART_GetITStatus和US
- 下一篇: mongo oplog 整理