sqlserver中drop、truncate和delete語句的用法,sqlservertruncate

來源:互聯網
上載者:User

sqlserver中drop、truncate和delete語句的用法,sqlservertruncate

雖然小編不建議大家去用命令刪除資料庫表中的東西,但是這些刪除命令總有用的著的地方。

說到刪除表資料的關鍵字,大家記得最多的可能就是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、不能清空父表


誰可以告訴我SQL server裡,刪除語句 Drop、DELETE、TRUNCATE三者有什不同

Drop刪除表,庫等等
DELETE刪除表中的記錄
TRUNCATE 清空整個表記錄(與全部刪除不同,相當於刪除表後重新按照結構再建立的表,所有資訊都初始化),不刪除表結構。
 
查詢中可用delete、drop、truncate table刪除語句,那它們在使用上有什不同?希望不吝賜教

TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同:二者均刪除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和交易記錄資源少。
DELETE 語句每次刪除一行,並在交易記錄中為所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放儲存表資料所用的資料頁來刪除資料,並且只在交易記錄中記錄頁的釋放。
TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的計數值重設為該列的種子。
如果想保留標識計數值,請改用 DELETE。
如果要刪除表定義及其資料,請使用 DROP TABLE 語句。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.