0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL數(shù)據(jù)庫(kù):drop、truncate和delete的區(qū)別

如意 ? 來(lái)源:CSDN ? 作者:海盜船長(zhǎng)沒(méi)有船 ? 2020-08-19 17:22 ? 次閱讀

一、delete

delete是DML(data maintain Language,這個(gè)操作會(huì)被放到 rollback segment中,事務(wù)提交后才生效),執(zhí)行delete操作時(shí),每次從表中刪除一行,并且同時(shí)將該行的的刪除操作記錄在redo和undo表空間中以便進(jìn)行回滾(rollback)和重做操作,但要注意表空間要足夠大,需要手動(dòng)提交(commit)操作才能生效,可以通過(guò)rollback撤消操作。

delete可根據(jù)條件刪除表中滿足條件的數(shù)據(jù),如果不指定where子句,那么刪除表中所有記錄。

delete語(yǔ)句不影響表所占用的extent,高水線(high watermark)保持原位置不變。

二、truncate

truncate是DDL,會(huì)隱式提交,所以,不能回滾,不會(huì)觸發(fā)觸發(fā)器。

truncate會(huì)刪除表中所有記錄,并且將重新設(shè)置高水線和所有的索引,缺省情況下將空間釋放到minextents個(gè)extent,除非使用reuse storage。不會(huì)記錄日志,所以執(zhí)行速度很快,但不能通過(guò)rollback撤消操作(如果一不小心把一個(gè)表truncate掉,也是可以恢復(fù)的,只是不能通過(guò)rollback來(lái)恢復(fù))。

對(duì)于外鍵(foreignkey )約束引用的表,不能使用 truncate table,而應(yīng)使用不帶 where 子句的 delete 語(yǔ)句。

truncatetable不能用于參與了索引視圖的表。

三、drop

drop是DDL,會(huì)隱式提交,所以,不能回滾,不會(huì)觸發(fā)觸發(fā)器。

drop語(yǔ)句刪除表結(jié)構(gòu)及所有數(shù)據(jù),并將表所占用的空間全部釋放。

drop語(yǔ)句將刪除表的結(jié)構(gòu)所依賴的約束,觸發(fā)器,索引,依賴于該表的存儲(chǔ)過(guò)程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài)。

總結(jié):

1、在速度上,一般來(lái)說(shuō),drop》 truncate 》 delete。

2、在使用drop和truncate時(shí)一定要注意,雖然可以恢復(fù),但為了減少麻煩,還是要慎用。

3、如果想刪除部分?jǐn)?shù)據(jù)用delete,注意帶上where子句,回滾段要足夠大;

如果想刪除表,當(dāng)然用drop;

如果想保留表而將所有數(shù)據(jù)刪除,如果和事務(wù)無(wú)關(guān),用truncate即可;

如果和事務(wù)有關(guān),或者想觸發(fā)trigger,還是用delete;

如果是整理表內(nèi)部的碎片,可以用truncate跟上reuse stroage,再重新導(dǎo)入/插入數(shù)據(jù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3739

    瀏覽量

    64181
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    1992

    瀏覽量

    60983
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    794

    瀏覽量

    26359
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Oracle數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫(kù)delete刪除的數(shù)據(jù)恢復(fù)方法

    刪除Oracle數(shù)據(jù)庫(kù)數(shù)據(jù)一般有以下2種方式:delete、droptruncate。下面針對(duì)這2種刪除oracle
    的頭像 發(fā)表于 09-11 11:45 ?272次閱讀

    Oracle數(shù)據(jù)恢復(fù)—Oracle數(shù)據(jù)庫(kù)truncate表的數(shù)據(jù)恢復(fù)案例

    北京某國(guó)企客戶Oracle 11g R2數(shù)據(jù)庫(kù)truncate table CM_CHECK_ITEM_HIS,表數(shù)據(jù)丟失,業(yè)務(wù)查詢到該表時(shí)報(bào)錯(cuò),數(shù)據(jù)庫(kù)的備份不可用,無(wú)法查詢表
    的頭像 發(fā)表于 03-11 17:30 ?333次閱讀
    Oracle<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—Oracle<b class='flag-5'>數(shù)據(jù)庫(kù)</b>誤<b class='flag-5'>truncate</b>表的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    mysql怎么新建一個(gè)數(shù)據(jù)庫(kù)

    mysql怎么新建一個(gè)數(shù)據(jù)庫(kù) 如何新建一個(gè)數(shù)據(jù)庫(kù)MySQL中 創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)MySQL中的基
    的頭像 發(fā)表于 12-28 10:01 ?812次閱讀

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—未開啟binlog的Mysql數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)案例

    mysql數(shù)據(jù)庫(kù)故障: 工作人員使用Delete命令刪除數(shù)據(jù)時(shí)未添加where子句進(jìn)行篩選,導(dǎo)致全表數(shù)據(jù)被刪除,刪除后未對(duì)該表進(jìn)
    的頭像 發(fā)表于 12-08 14:18 ?1009次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—未開啟binlog的<b class='flag-5'>Mysql</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    eclipse怎么連接數(shù)據(jù)庫(kù)mysql

    連接Eclipse和MySQL數(shù)據(jù)庫(kù)可以通過(guò)JDBC(Java Database Connectivity)來(lái)實(shí)現(xiàn)。以下是詳細(xì)步驟: 下載并安裝MySQL數(shù)據(jù)庫(kù):你首先需要下載并安裝
    的頭像 發(fā)表于 12-06 11:06 ?1143次閱讀

    MySQL數(shù)據(jù)庫(kù)的url地址

    MySQL數(shù)據(jù)庫(kù)的URL地址是用于連接到MySQL服務(wù)器的地址。URL是一種統(tǒng)一資源定位符,用于指定特定資源的位置和訪問(wèn)方式。MySQL數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 12-06 10:58 ?2431次閱讀

    mysql數(shù)據(jù)庫(kù)基礎(chǔ)命令

    MySQL是一個(gè)流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),經(jīng)常用于存儲(chǔ)、管理和操作數(shù)據(jù)。在本文中,我們將詳細(xì)介紹MySQL的基礎(chǔ)命令,并提供與每個(gè)命令相關(guān)的詳細(xì)解釋。 登錄
    的頭像 發(fā)表于 12-06 10:56 ?512次閱讀

    mysql數(shù)據(jù)庫(kù)備份與還原

    MySQL是一種常見的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),用于存儲(chǔ)和管理數(shù)據(jù)。備份和還原數(shù)據(jù)庫(kù)是非常重要的操作,可以保護(hù)數(shù)據(jù)免受丟失或損壞的影響。本文將詳
    的頭像 發(fā)表于 11-23 14:32 ?1101次閱讀

    MySQL數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí)

    MySQL 是一種開源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它是目前最流行的數(shù)據(jù)庫(kù)之一。MySQL 提供了一種結(jié)構(gòu)化的方法來(lái)管理大量的數(shù)據(jù),并且具有高效、
    的頭像 發(fā)表于 11-21 11:09 ?904次閱讀

    mysql和sql server區(qū)別

    MySQL和SQL Server是兩種常見的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),用于存儲(chǔ)和管理數(shù)據(jù)庫(kù)。雖然它們都支持SQL語(yǔ)言,但在其他方面存在一些顯著的區(qū)別。以下是
    的頭像 發(fā)表于 11-21 11:07 ?1398次閱讀

    mysql數(shù)據(jù)庫(kù)命令大全

    MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它擁有豐富的命令來(lái)管理和操作數(shù)據(jù)庫(kù)。以下是一份詳盡、詳實(shí)、細(xì)致的MySQL數(shù)據(jù)庫(kù)命令大全,希望對(duì)您有所
    的頭像 發(fā)表于 11-16 16:39 ?1322次閱讀

    數(shù)據(jù)庫(kù)mysql基本增刪改查

    MySQL是一種開源的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),常用于Web應(yīng)用程序的數(shù)據(jù)存儲(chǔ)和管理。通過(guò)使用MySQL,用戶可以進(jìn)行數(shù)據(jù)的增刪改查操作,從而實(shí)
    的頭像 發(fā)表于 11-16 16:35 ?1408次閱讀

    mysql數(shù)據(jù)庫(kù)的增刪改查sql語(yǔ)句

    MySQL是一種常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),是許多網(wǎng)站和應(yīng)用程序的首選數(shù)據(jù)庫(kù)。在MySQL中,我們可以使用SQL(結(jié)構(gòu)化查詢語(yǔ)言)進(jìn)行數(shù)據(jù)
    的頭像 發(fā)表于 11-16 15:41 ?1093次閱讀

    mysql是一個(gè)什么類型的數(shù)據(jù)庫(kù)

    MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS),用于存儲(chǔ)和管理大量結(jié)構(gòu)化數(shù)據(jù)。它被廣泛用于各種應(yīng)用程序和網(wǎng)站的后端,包括電子商務(wù)平臺(tái)、社交媒體網(wǎng)站、金融系統(tǒng)等等。MySQL的特點(diǎn)是
    的頭像 發(fā)表于 11-16 14:43 ?1574次閱讀

    數(shù)據(jù)庫(kù)數(shù)據(jù)恢復(fù)—MySQL數(shù)據(jù)庫(kù)表誤刪除記錄的數(shù)據(jù)恢復(fù)案例

    binlog。 數(shù)據(jù)庫(kù)故障&分析: 工作人員在執(zhí)行Delete命令刪除數(shù)據(jù)時(shí)未添加where子句進(jìn)行篩選,導(dǎo)致全表數(shù)據(jù)被刪除,刪除后未對(duì)該表進(jìn)行其他操作。 在本案例中,由于
    的頭像 發(fā)表于 11-09 15:16 ?1218次閱讀
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—<b class='flag-5'>MySQL</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b>表誤刪除記錄的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例