中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

delete、truncate和drop選擇哪個好

發布時間:2020-11-07 14:50:16 來源:億速云 閱讀:452 作者:Leah 欄目:開發技術

delete、truncate和drop選擇哪個好?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

MySQL刪除數據的方式都有哪些?

咱們常用的三種刪除方式:通過 delete、truncate、drop 關鍵字進行刪除;這三種都可以用來刪除數據,但場景不同。

一、從執行速度上來說

drop > truncate >> DELETE

二、從原理上講

1、DELETE

DELETE from TABLE_NAME where xxx

1、DELETE屬于數據庫DML操作語言,只刪除數據不刪除表的結構,會走事務,執行時會觸發trigger;

2、在 InnoDB 中,DELETE其實并不會真的把數據刪除,mysql 實際上只是給刪除的數據打了個標記為已刪除,因此 delete 刪除表中的數據時,表文件在磁盤上所占空間不會變小,存儲空間不會被釋放,只是把刪除的數據行設置為不可見。雖然未釋放磁盤空間,但是下次插入數據的時候,仍然可以重用這部分空間(重用 → 覆蓋)。

3、DELETE執行時,會先將所刪除數據緩存到rollback segement中,事務commit之后生效;

4、delete from table_name刪除表的全部數據,對于MyISAM 會立刻釋放磁盤空間,InnoDB 不會釋放磁盤空間;

5、對于delete from table_name where xxx 帶條件的刪除, 不管是InnoDB還是MyISAM都不會釋放磁盤空間;

6、delete操作以后使用 optimize table table_name 會立刻釋放磁盤空間。不管是InnoDB還是MyISAM 。所以要想達到釋放磁盤空間的目的,delete以后執行optimize table 操作。

示例:查看表占用硬盤空間大小的SQL語句如下:(用M做展示單位,數據庫名:csjdemo,表名:demo2)

select concat(round(sum(DATA_LENGTH/1024/1024),2),'M') as table_size 
 from information_schema.tables 
 where table_schema='csjdemo' AND table_name='demo2';

delete、truncate和drop選擇哪個好

然后執行空間優化語句,以及執行后的表Size變化:

optimize table demo2

delete、truncate和drop選擇哪個好

再看看這張表的大小,就只剩下表結構size了。

delete、truncate和drop選擇哪個好

7、delete 操作是一行一行執行刪除的,并且同時將該行的的刪除操作日志記錄在redo和undo表空間中以便進行回滾(rollback)和重做操作,生成的大量日志也會占用磁盤空間

2、truncate

Truncate table TABLE_NAME

1、truncate:屬于數據庫DDL定義語言,不走事務,原數據不放到 rollback segment 中,操作不觸發 trigger。

執行后立即生效,無法找回
執行后立即生效,無法找回
執行后立即生效,無法找回

2、truncate table table_name 立刻釋放磁盤空間 ,不管是 InnoDB和MyISAM 。truncate table其實有點類似于drop table 然后creat,只不過這個create table 的過程做了優化,比如表結構文件之前已經有了等等。所以速度上應該是接近drop table的速度;

3、truncate能夠快速清空一個表。并且重置auto_increment的值。

但對于不同的類型存儲引擎需要注意的地方是:

  • 對于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仍然保存在內存,但是重啟后就丟失了,只能從1開始。實質上重啟后的auto_increment會從 SELECT 1+MAX(ai_col) FROM t 開始。

4、小心使用 truncate,尤其沒有備份的時候,如果誤刪除線上的表,記得及時聯系中國民航,訂票電話:400-806-9553

3、drop

Drop table Tablename

1、drop:屬于數據庫DDL定義語言,同Truncate;

執行后立即生效,無法找回
執行后立即生效,無法找回
執行后立即生效,無法找回

2、drop table table_name 立刻釋放磁盤空間 ,不管是 InnoDB 和 MyISAM; drop 語句將刪除表的結構被依賴的約束(constrain)、觸發器(trigger)、索引(index);  依賴于該表的存儲過程/函數將保留,但是變為 invalid 狀態。

3、小心使用 drop ,要刪表跑路的兄弟,請在訂票成功后在執行操作!訂票電話:400-806-9553

可以這么理解,一本書,delete是把目錄撕了,truncate是把書的內容撕下來燒了,drop是把書燒了

delete、truncate和drop選擇哪個好

關于delete、truncate和drop選擇哪個好問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌鲁木齐市| 通河县| 县级市| 平和县| 邵阳市| 长海县| 东辽县| 斗六市| 西乌珠穆沁旗| 屯昌县| 平乐县| 玉门市| 庐江县| 望江县| 澄江县| 汉寿县| 呼伦贝尔市| 牙克石市| 巴东县| 临沧市| 新源县| 柘城县| 张北县| 繁昌县| 郴州市| 图木舒克市| 苗栗市| 阳泉市| 普安县| 广水市| 荔浦县| 昌平区| 德钦县| 洮南市| 楚雄市| 龙门县| 迭部县| 曲沃县| 永州市| 北碚区| 邻水|