刪除表資料
drop
、truncate
和delete
的用法說到刪除表資料的關鍵字
,大家記得最多的可能就是
delete
了然而我們做資料庫開發
,讀取資料庫資料
.對另外的兩兄弟用得就比較少了
現在來介紹另外兩個兄弟
,都是刪除表資料的
,其實也是很容易理解的
老大
------drop
出沒場合
:drop table tb --tb
表示資料表的名字,下同
絕招:刪除內容和定義,釋放空間。簡單來說就是把整個表去掉.
以後要新增資料是不可能的
,除非新增乙個表,例如
:乙個班就是乙個表
,學生就是表中的資料
,學生的職務就是定義
drop table class,
就是把整個班移除
.學生和職務都消失
比如下面
test
school
資料庫中有兩張表
[classes]
表和[teacher]
表
當執行下面**之後
classes
表就被清楚
,一乾二淨
! 刪除得非常暴力
,作為老大實至名歸
老二
-----truncate
出沒場合
:truncate table tb絕招:
刪除內容、釋放空間但不刪除定義。與
drop
不同的是
,他只是清空表資料而已
,他比較溫柔
.同樣也是乙個班
,他只去除所有的學生
.班還在
,職務還在
,如果有新增的學生可以進去
,也可以分配上職務
刪除內容很容易理解
,不刪除定義也很容易理解
,就是保留表的資料結構
上圖就表現了
:刪除內容
執行語句之後
,發現資料表的結構還在
,也就是不刪除定義
至於釋放空間
,看下下面兩幅圖
.你們就會明白的
右圖:id
列標識列
,因之前
delete
過行資料
,所以會出現標識列不連續
(體現了
delete
刪除是不釋放空間的)經過
truncate table teacher
之後再新增三條資料
同樣id
是標識列
,發現插入資料的時候
,標識列連續了
(體現了
truncate
刪除是釋放空間)注意
:truncate
不能刪除行資料
,要刪就要把錶清空
老三
-----delete
出沒場合
:delete table tb --
雖然也是刪除整個表的資料
,但是過程是痛苦的
(系統一行一行地刪
,效率較
truncate低)
或delete table tb where
條件絕招
:刪除內容不刪除定義,不釋放空間。三兄弟之中最容易欺負的乙個
然後關於
delete
的就不詳細說明了
,大家都懂的
關於truncate
的小小總結
:truncate table
在功能上與不帶
where
子句的delete
語句相同:二者均刪除表中的全部行。
但truncate
比delete
速度快,且使用的系統和事務日誌資源少。
delete
語句每次刪除一行,並在事務日誌中為所刪除的每行記錄一項。所以可以對
delete
操作進行
roll back1、
truncate
在各種表上無論是大的還是小的都非常快。如果有
rollback
命令delete
將被撤銷,而
truncate
則不會被撤銷。2、
truncate
是乙個ddl
語言,向其他所有的
ddl語言一樣,他將被隱式提交,不能對
truncate
使用rollback
命令。3
、truncate
將重新設定高水平線和所有的索引。在對整個表和索引進行完全瀏覽時,經過
truncate
操作後的錶比
delete
操作後的表要快得多。4、
truncate
不能觸發任何
delete
觸發器。
5、當表被清空後表和表的索引講重新設定成初始大小,而
delete
則不能。
6、不能清空父表
delete和drop truncate的區別
1.truncate和不帶where子句的delete 以及drop都會刪除表內的資料。2.drop truncate都是ddl語句 資料定義語言 執行後會自動提交。1.truncate 和 delete 只刪除資料不刪除表的結構 定義 drop 語句將刪除表的結構被依賴的約束 constrain ...
drop truncate和delete的區別
delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存以便進行進行回滾操作。truncate table 則一次性地從表中刪除所有的資料並不把單獨的刪除操作記錄記入日誌儲存,刪除行是不能恢復的。並且在刪除的過程中不會啟用與表有關的刪除觸發器。執行速度快。...
drop truncate和delete的區別
1 delete語句執行刪除的過程是每次從表中刪除一行,並且同時將該行的刪除操作作為事務記錄在日誌中儲存以便進行進行回滾操作。truncate table 則一次性地從表中刪除所有的資料並不把單獨的刪除操作記錄記入日誌儲存,刪除行是不能恢復的。並且在刪除的過程中不會啟用與表有關的刪除觸發器。執行速度...