drop與truncate與delete的區別與聯系


在mysql和oracle數據庫中delete與truncate都是可以用來對數據進行刪除操作,但是二者又有些不同。

主要有以下幾個區別:

區別一:

根據sql語言分類來說,delete屬於DML語言,也就是數據操作語言,而truncate屬於DDL語言,也就是數據定義語言。

區別二:

delete不僅可以刪除表中的數據,還可以刪除基於真實表創建的視圖中的數據。truncate則只能刪除表中的數據,不能作用於視圖。

區別三:

在數據庫刪除數據時,delete可以根據需要進行刪除,也就是delete可以結合where條件進行精確的刪除某一條數據,而truncate則不能支持where子句,如果作用於表,則是直接刪除表所有數據。

區別四:

delete刪除表時,會涉及到事務處理,也就是可以支持事務提交,回滾。所謂事務就是支持數據一致性,原子性,持久性,隔離性。當使用delete刪除表數據時,首先它不會真正刪除,而是會將刪除的數據放入一個緩存區,可以通過回滾,從而恢復數據。但是使用truncate刪除表中數據時,truncate不涉及事務處理,所以被truncate刪除的數據是不可恢復的。

區別五:

由於delete刪除數據涉及到事務處理,會涉及到緩存,當數據非常大時,有可能緩存不夠用,所以這時使用delete刪除數據可能達不到刪除到的目的,而且速度特別慢。當涉及到大批量的數據時,truncate就非常適合,因為他不涉及到緩存,所以速度特別快,效率也高。

區別六:

有時候對數據操作可能涉及到觸發器,用delete刪除數據時則有可能會激活觸發器,進行一些操作。而truncate是不存在觸發器的處理的。

區別七:

在對於一些存在關聯關系的表,使用delete刪除數據時,可以運用sql的業務邏輯順序來進行達到刪除數據的目的。例如表A與表B存在一對多的關系,表A中id為主鍵,並且id在表B中是作為表B的外鍵。要刪除數據,這時不能直接刪除表B,而應該先刪除表A在進行刪除表B,這樣就達到目的。

而truncate不能刪除對於由外鍵約束的表,它達不到刪除該表的目的。

 

delete和truncate的應用場景

1.delete適用於數據量較小,對於性能要求不是很高的情況下,可以采用delete加上where子句進行刪除數據。

2.如果需要考慮事務提交,回滾操作的,適合適用delete進行刪除數據。

3.當涉及到大量數據,而且是不需要回滾的情況下,並且要求速度快,效率高,則可以使用truncate來刪除數據。

 

delete和truncate是用來刪除表數據的(但是保留表結構),而drop是用來刪除整個表的,包括表結構和表內容,在sql語言分類上它是屬於DDL語言。

他們執行的速度快慢關系:drop>truncate>delete。

最后,在企業級項目開發中,對於數據並不是真正的從物理上進行刪除,而是進行邏輯上的刪除,此時會對刪除數據進行一個刪除標識的處理,也就是說只是把數據從頁面上隱藏了,用戶暫時看不見了而已,其實數據是還存在的。

 

參見: https://blog.csdn.net/ws0513/article/details/49980547


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM