sql語句中----刪除表數據drop、truncate和delete的用法(轉)

轉載於:http://www.cr173.com/html/40708_1.htmlhtml

說到刪除表數據的關鍵字,你們記得最多的可能就是delete了數據庫

然而咱們作數據庫開發,讀取數據庫數據.對另外的兩兄弟用得就比較少了數據結構

如今來介紹另外兩個兄弟,都是刪除表數據的,其實也是很容易理解的3d

老大------drop日誌

出沒場合:drop table  tb --tb表示數據表的名字,下同htm

絕招:刪除內容和定義,釋放空間。簡單來講就是把整個表去掉.之後要新增數據是不可能的,除非新增一個表,blog

       例如:一個班就是一個表,學生就是表中的數據,學生的職務就是定義索引

       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

一、truncate 在各類表上不管是大的仍是小的都很是快。若是有ROLLBACK命令Delete將被撤銷,而 truncate 則不會被撤銷。 二、truncate 是一個DDL語言,向其餘全部的DDL語言同樣,他將被隱式提交,不能對 truncate 使用ROLLBACK命令。 三、truncate 將從新設置高水平線和全部的索引。在對整個表和索引進行徹底瀏覽時,通過 truncate 操做後的表比Delete操做後的表要快得多。 四、truncate 不能觸發任何Delete觸發器。 五、當表被清空後表和表的索引講從新設置成初始大小,而delete則不能。 六、不能清空父表

相關文章
相關標籤/搜索