主頁(yè) > 知識(shí)庫(kù) > MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)

MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)

熱門(mén)標(biāo)簽:常州網(wǎng)絡(luò)外呼系統(tǒng)開(kāi)發(fā) 外呼系統(tǒng)電銷(xiāo)受騙 走過(guò)哪個(gè)省地圖標(biāo)注 萊西市地圖標(biāo)注 巫師三血與酒地圖標(biāo)注 銷(xiāo)售語(yǔ)音電話機(jī)器人 在哪里申請(qǐng)400電話 安徽ai電話電銷(xiāo)機(jī)器人有效果嗎 400電話申請(qǐng)信用卡

本文主要講mysql中三種刪除表的操作,delete語(yǔ)句、truncate語(yǔ)句以及drop語(yǔ)句的區(qū)別:

簡(jiǎn)介

delete

1、刪除整張表的數(shù)據(jù):

delete from table_name;

2、刪除部分?jǐn)?shù)據(jù),添加where子句:

delete from table_name where...;

3、說(shuō)明

  1)、屬于DML語(yǔ)言,每次刪除一行,都在事務(wù)日志中為所刪除的每行記錄一項(xiàng)。產(chǎn)生rollback,事務(wù)提交之后才生效;如果有相應(yīng)的 trigger,執(zhí)行的時(shí)候?qū)⒈挥|發(fā),如果刪除大數(shù)據(jù)量的表速度會(huì)很慢。
 ?。玻h除表中數(shù)據(jù)而不刪除表的結(jié)構(gòu)(定義),同時(shí)也不釋放空間。

truncate

1、只能操作表,將表中數(shù)據(jù)全部刪除,在功能上和不帶where子句的delete語(yǔ)句相同:

truncate table table_name;

2、說(shuō)明

 ?。?、默認(rèn)情況下,truncate通過(guò)釋放存儲(chǔ)表數(shù)據(jù)所用的數(shù)據(jù)頁(yè)來(lái)刪除數(shù)據(jù),并且只在事務(wù)日志中記錄頁(yè)的釋放。所以使用的系統(tǒng)和事務(wù)日志資源少,可以使用reuse storage; truncate會(huì)將高水線復(fù)位(回到最開(kāi)始).
  2 )、 truncate是DDL語(yǔ)言, 操作立即生效,自動(dòng)提交,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.
  3 )、刪除內(nèi)容、釋放空間但不刪除表的結(jié)構(gòu)(定義)。

drop

1、drop語(yǔ)句將刪除表的結(jié)構(gòu),以及被依賴的約束(constrain),觸發(fā)器(trigger),索引(index);

drop table table_name;

2、說(shuō)明
  1)、刪除之后,依賴于該表的存儲(chǔ)過(guò)程/函數(shù)將保留,但是變?yōu)閕nvalid狀態(tài).
  2)、drop也屬于DDL語(yǔ)言,立即執(zhí)行,執(zhí)行速度最快
  3)、刪除內(nèi)容和定義,釋放空間。

區(qū)別

1、表和索引所占空間:
  當(dāng)表被TRUNCATE 后,這個(gè)表和索引所占用的空間會(huì)恢復(fù)到初始大??;
  DELETE操作不會(huì)減少表或索引所占用的空間;
  DROP語(yǔ)句將表所占用的空間全釋放掉。

2、應(yīng)用范圍:
  TRUNCATE 只能對(duì)table;
  DELETE可以是table和view。

3、執(zhí)行速度: drop > truncate > delete

4、delete from刪空表后,會(huì)保留一個(gè)空的頁(yè),truncate在表中不會(huì)留有任何頁(yè)。

5、DELETE語(yǔ)句執(zhí)行刪除的過(guò)程是每次從表中刪除一行,并且同時(shí)將該行的刪除操作作為事務(wù)記錄在日志中保存以便進(jìn)行進(jìn)行回滾操作。

TRUNCATE TABLE 則一次性地從表中刪除所有的數(shù)據(jù)并不把單獨(dú)的刪除操作記錄記入日志保存,刪除行是不能恢復(fù)的。并且在刪除的過(guò)程中不會(huì)激活與表有關(guān)的刪除觸發(fā)器。執(zhí)行速度快。

6、當(dāng)使用行鎖執(zhí)行 DELETE 語(yǔ)句時(shí),將鎖定表中各行以便刪除。truncate始終鎖定表和頁(yè),而不是鎖定各行。

7、如果有identity產(chǎn)生的自增id列,delete from后仍然從上次的數(shù)開(kāi)始增加,即種子不變;

使用truncate刪除之后,種子會(huì)恢復(fù)到初始值。

總結(jié)

1、delete 語(yǔ)句可以使用where子句實(shí)現(xiàn)部分刪除,而truncate不可以,會(huì)將表中的整個(gè)數(shù)據(jù)全部刪除,使用時(shí),可以按需求選擇;
2、如果想從表中刪除所有的數(shù)據(jù),不要使用delete,可以使用truncate語(yǔ)句,因?yàn)檫@樣執(zhí)行速度更快。truncate語(yǔ)句實(shí)際是刪除原來(lái)的表然后重新建立一個(gè)新表;
3、在沒(méi)有備份情況下,謹(jǐn)慎使用 drop 與 truncate。要?jiǎng)h除表結(jié)構(gòu)使用drop;
4、對(duì)于由 FOREIGN KEY 約束引用的表,不能使用 TRUNCATE TABLE,而應(yīng)使用不帶 WHERE 子句的 DELETE 語(yǔ)句。由于 TRUNCATE TABLE 不記錄在日志中,所以它不能激活觸發(fā)器。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • MySQL Truncate用法詳解
  • MySQL中truncate誤操作后的數(shù)據(jù)恢復(fù)案例
  • mysql 刪除操作(delete+TRUNCATE)
  • MySQL刪除數(shù)據(jù)Delete與Truncate語(yǔ)句使用比較
  • 詳解MySQL中DROP,TRUNCATE 和DELETE的區(qū)別實(shí)現(xiàn)mysql從零開(kāi)始
  • MySQL用truncate命令快速清空一個(gè)數(shù)據(jù)庫(kù)中的所有表

標(biāo)簽:河北 陽(yáng)江 果洛 赤峰 來(lái)賓 煙臺(tái) 鞍山 黃石

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)》,本文關(guān)鍵詞  MySQL,刪除,表,操作,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于MySQL刪除表操作實(shí)現(xiàn)(delete、truncate、drop的區(qū)別)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章