删除表資料drop、truncate和delete的用法
說到删除表資料的關鍵字,大家記得最多的可能就是delete了
然而我們做資料庫開發,讀取資料庫資料.對另外的兩兄弟用得就比較少了
現在來介紹另外兩個兄弟,都是删除表資料的,其實也是很容易了解的
老大------drop
出沒場合:drop table tb --tb表示資料表的名字,下同
絕招:删除内容和定義,釋放空間。簡單來說就是把整個表去掉.以後要新增資料是不可能的,除非新增一個表,
例如:一個班就是一個表,學生就是表中的資料,學生的職務就是定義
drop table class,就是把整個班移除.學生和職務都消失
比如下面testSchool資料庫中有兩張表[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 back
1、truncate 在各種表上無論是大的還是小的都非常快。如果有ROLLBACK指令Delete将被撤銷,而 truncate 則不會被撤銷。
2、truncate 是一個DDL語言,向其他所有的DDL語言一樣,他将被隐式送出,不能對 truncate 使用ROLLBACK指令。
3、truncate 将重新設定高水準線和所有的索引。在對整個表和索引進行完全浏覽時,經過 truncate 操作後的表比Delete操作後的表要快得多。
4、truncate 不能觸發任何Delete觸發器。
5、當表被清空後表和表的索引講重新設定成初始大小,而delete則不能。
6、不能清空父表