說到洗掉表資料的關鍵字,大家記得最多的可能就是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 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、不能清空父表
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/210743.html
標籤:SQL Server
上一篇:Zabbix告警:SQL Instance MSSQLSERVER: Could not allocate a new page
下一篇:Zabbix告警:SQL Instance MSSQLSERVER: Could not allocate a new page
