天天看點

sql語句删除表資料drop、truncate和delete的用法

雖然西西不建議大家去用指令删除資料庫表中的東西,但是這些删除指令總有用的着的地方。

說到删除表資料的關鍵字,大家記得最多的可能就是delete了

然而我們做資料庫開發,讀取資料庫資料.對另外的兩兄弟用得就比較少了

現在來介紹另外兩個兄弟,都是删除表資料的,其實也是很容易了解的

老大------drop

出沒場合:drop table  tb --tb表示資料表的名字,下同

絕招:删除内容和定義,釋放空間。簡單來說就是把整個表去掉.以後要新增資料是不可能的,除非新增一個表,

       例如:一個班就是一個表,學生就是表中的資料,學生的職務就是定義

       drop table class,就是把整個班移除.學生和職務都消失

比如下面TestSchool資料庫中有兩張表[Classes]表和[Teacher]表

sql語句删除表資料drop、truncate和delete的用法

當執行下面代碼之後

sql語句删除表資料drop、truncate和delete的用法

Classes表就被清楚,一幹二淨! 删除得非常暴力,作為老大實至名歸

sql語句删除表資料drop、truncate和delete的用法

老二-----truncate

出沒場合:truncate table tb

絕招:删除内容、釋放空間但不删除定義。與drop不同的是,他隻是清空表資料而已,他比較溫柔.

       同樣也是一個班,他隻去除所有的學生.班還在,職務還在,如果有新增的學生可以進去,也可以配置設定上職務

删除内容很容易了解,不删除定義也很容易了解,就是保留表的資料結構

sql語句删除表資料drop、truncate和delete的用法

上圖就表現了:删除内容

sql語句删除表資料drop、truncate和delete的用法

執行語句之後,發現資料表的結構還在,也就是不删除定義

至于釋放空間,看下下面兩幅圖.你們就會明白的

sql語句删除表資料drop、truncate和delete的用法

右圖:Id列辨別列,因之前delete過行資料,是以會出現辨別列不連續(展現了delete删除是不釋放空間的)

經過truncate table Teacher 之後 再新增三條資料

sql語句删除表資料drop、truncate和delete的用法

右圖:同樣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、不能清空父表