自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MySQL:刪除操作Delete、Truncate、Drop用法比較

運維 數(shù)據(jù)庫運維
今天小編給大家梳理一下MYSQL刪除操作Delete、Truncate、Drop用法有什么區(qū)別,到底該如何合理使用,希望對大家能有幫助!

[[428208]]

今天小編給大家梳理一下MySQL刪除操作Delete、Truncate、Drop用法有什么區(qū)別,到底該如何合理使用,希望對大家能有幫助!

1、執(zhí)行速度比較

Delete、Truncate、Drop關(guān)鍵字都可以刪除數(shù)據(jù)

drop>truncate>delete

2、原理方面

2.1 delete

delete屬于數(shù)據(jù)庫DML操作語言,只會刪除數(shù)據(jù)表中的記錄,會執(zhí)行事務(wù),執(zhí)行的時候也會觸發(fā)觸發(fā)器。

InnoDB數(shù)據(jù)庫引擎中,執(zhí)行delete操作只會給刪除的記錄打上了刪除標(biāo)記,并不會真正刪除數(shù)據(jù),只是把刪除的數(shù)據(jù)記錄設(shè)置為不可見,不會釋放磁盤空間,如果插入新的數(shù)據(jù)可以覆蓋該部分空間。

如果開啟事務(wù)的話,執(zhí)行delete操作,會先將要刪除數(shù)據(jù)緩存到rollback segement中,等事務(wù)commit之后才生效。

delete from table_name 不帶查詢條件會刪除表的全部數(shù)據(jù),MyISAM引擎會立刻釋放磁盤空間,InnoDB 不會釋放磁盤空間;如果帶查詢條件的話都不會釋放磁盤空間,可以執(zhí)行optimize table table_name 會立刻釋放磁盤空間。建議如果需要釋放存儲空間的話可以執(zhí)行delete后,然后執(zhí)行optimize table table_name 語句達(dá)到清理磁盤空間的目的。

-- 查詢數(shù)據(jù)庫test對應(yīng)的表t_user 占用的磁盤空間

  1. select concat(round(sum(DATA_LENGTH/1024/1024),2),'M'as table_size  
  2.  
  3. from information_schema.tables  
  4.  
  5. where table_schema='test' AND table_name='t_user'

說明:delete 操作是逐行執(zhí)行刪除的,并且同時將每行的的刪除操作日志記錄在redo和undo表空間中去,便于進(jìn)行回滾(rollback)和重做操作,因此生成的大量操作日志也會占用磁盤空間。

2.2 truncate

truncate是數(shù)據(jù)庫DDL定義語言,不受事務(wù)影響,也不會觸發(fā) trigger。執(zhí)行操作后會立即生效,無法找回刪除的數(shù)據(jù)。

執(zhí)行truncate table table_name 會立刻釋放磁盤空間 ,不管是 InnoDB和MyISAM 都一樣 。

truncate可以退快速清空一個表。并且重置auto_increment自動增長的值。針對不同類型的數(shù)據(jù)存儲引擎是有區(qū)別的,具體如下:

MyISAM:truncate會重置auto_increment(自增序列)的值為1。而delete后表仍然保持auto_increment。

InnoDB:truncate會重置auto_increment的值為1。delete后表仍然保持auto_increment。但是在做delete整個表之后重啟MySQL的話,則重啟后的auto_increment會被置為1。

說明:InnoDB的表本身是無法持久保存auto_increment。delete表之后auto_increment仍然保存在內(nèi)存,但是重啟后就找不到了,只能從1開始。實際上重啟后的auto_increment會從 SELECT 1+MAX(ai_col) FROM t 開始。

使用truncate操作的時候要最好備份表,避免出現(xiàn)不可挽回的情況。

2.3 drop

drop屬于數(shù)據(jù)庫DDL定義語言,和truncate一樣。執(zhí)行后會立即生效,不可恢復(fù)。

drop table table_name 執(zhí)行成功后不管是MyISM還是InnoDB都會立刻釋放磁盤空間 ,并且會刪除該數(shù)據(jù)表上依賴的約束(constrain)、觸發(fā)器(trigger)、索引(index);  依賴于該表的存儲過程/函數(shù)將保留,但是會變?yōu)槭顟B(tài)。

總結(jié)

在工作當(dāng)中執(zhí)行數(shù)據(jù)庫刪除的時候一定要慎重再慎重,建議每次進(jìn)行數(shù)據(jù)刪除的使用最好數(shù)據(jù)表的備份工作,這樣就會大大減少你刪除跑路的幾率。很多時候不要過于相信自己的動手能力,老虎還有打盹的時候,萬一手滑了呢。盡可能養(yǎng)成好的數(shù)據(jù)庫運維習(xí)慣,這樣會讓自己少跌跟頭,你的事業(yè)才會更加順利。

本文轉(zhuǎn)載自微信公眾號「IT技術(shù)分享社區(qū)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系IT技術(shù)分享社區(qū)公眾號。

個人博客網(wǎng)站:https://programmerblog.xyz

 

責(zé)任編輯:武曉燕 來源: IT技術(shù)分享社區(qū)
相關(guān)推薦

2023-12-05 15:36:39

數(shù)據(jù)庫SQL

2024-10-22 17:04:31

2020-10-21 10:30:24

deletetruncatedrop

2022-06-08 07:34:25

InnoDBdeleteMySQL

2022-06-20 07:44:22

truncatedeletedrop

2010-10-08 16:05:30

MySQL DELET

2010-11-10 13:28:06

SQL Server刪

2010-05-20 09:01:22

MySQL數(shù)據(jù)庫

2011-08-11 13:19:17

MySQLupdatedelete

2012-12-26 09:36:45

MySQLDelete

2024-08-09 10:06:09

2020-11-17 09:01:09

MySQLDelete數(shù)據(jù)

2010-05-27 17:35:36

MYSQL DELET

2010-09-03 10:21:35

SQL刪除

2019-05-28 16:25:34

MySQL刪除操作數(shù)據(jù)庫

2010-10-22 16:40:27

SQL TRUNCAT

2010-09-16 16:17:03

TRUNCATE TA

2010-11-11 10:03:58

SQL Delete命

2010-02-04 16:35:24

C++ delete

2022-05-07 10:20:17

truncatedeleteMySQL
點贊
收藏

51CTO技術(shù)棧公眾號