MySQL中清空表和截断表的区别(新手入门.)
清空表和截?cái)啾?/h2>
清空表:delete from users;
清空表只是清空表中的邏輯數(shù)據(jù),但是物理數(shù)據(jù)不清除,如主鍵值、索引等不被清除,還是原來的值。
截?cái)啾?/strong>:truncate table users;
截?cái)啾砜梢杂糜趧h除表中 的所有數(shù)據(jù)。截?cái)啾砻钸€會(huì)回收所有索引的分配頁。截?cái)啾淼膱?zhí)行速度與不帶where子句的delete(刪除)命令相同,甚至比它還要快。 delete(刪除)一次刪除一行數(shù)據(jù),并且將每一行被刪除的數(shù)據(jù)都作為一個(gè)事務(wù)記錄日志;而truncate (截?cái)?#xff09;表則回收整個(gè)數(shù)據(jù)頁,只記錄很少的日志項(xiàng)。delete(刪除)和truncate(截?cái)?#xff09;都會(huì)回收被數(shù)據(jù)占用的空間,以及相關(guān)的索引。只有表的 擁有者可以截?cái)啾怼?/p>
另外,truncate表之后,如果有自動(dòng)主鍵的話,會(huì)恢復(fù)成默認(rèn)值。
主要區(qū)別如下:
truncate是整體刪除(速度較快), delete是逐條刪除(速度較慢)。
truncate不寫服務(wù)器log,delete寫服務(wù)器log,也就是truncate效率比delete高的原因。
truncate不激活trigger(觸發(fā)器),但是會(huì)重置Identity(標(biāo)識(shí)列、自增字段),相當(dāng)于自增列會(huì)被置為初始值,又重新從1開始記錄,而不是接著原來的ID數(shù)。
而delete刪除以后,Identity依舊是接著被刪除的最近的那一條記錄ID加1后進(jìn)行記錄。
總結(jié)
以上是生活随笔為你收集整理的MySQL中清空表和截断表的区别(新手入门.)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IO的几种分类(详细)
- 下一篇: MySQL行转列与列转行