最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

delete、truncate、drop的區(qū)別以及該如何選擇

 更新時(shí)間:2020年11月06日 14:27:58   作者:_陳哈哈  
這篇文章主要給大家介紹了關(guān)于delete、truncate、drop的區(qū)別以及該如何選擇的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

上周同事小姐姐問我:“哈哥你看,我發(fā)現(xiàn)MySQL有bug,我下午為了清理磁盤,明明刪除了100萬(wàn)條MySQL數(shù)據(jù),磁盤不僅沒有變小,反而更滿了呢??”

那你是怎么刪除的?

“delete from table 呀”

“怪不得,其實(shí)要?jiǎng)h除MySQL數(shù)據(jù)是有好幾種方式的,有些場(chǎng)景下是不應(yīng)該用DELETE的,比如你這種情況。好了,讓我來(lái)給你講一下吧?!?/p>

MySQL刪除數(shù)據(jù)的方式都有哪些?

咱們常用的三種刪除方式:通過 delete、truncate、drop 關(guān)鍵字進(jìn)行刪除;這三種都可以用來(lái)刪除數(shù)據(jù),但場(chǎng)景不同。

一、從執(zhí)行速度上來(lái)說(shuō)

drop > truncate >> DELETE

二、從原理上講

1、DELETE

DELETE from TABLE_NAME where xxx

1、DELETE屬于數(shù)據(jù)庫(kù)DML操作語(yǔ)言,只刪除數(shù)據(jù)不刪除表的結(jié)構(gòu),會(huì)走事務(wù),執(zhí)行時(shí)會(huì)觸發(fā)trigger;

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

3、DELETE執(zhí)行時(shí),會(huì)先將所刪除數(shù)據(jù)緩存到rollback segement中,事務(wù)commit之后生效;

4、delete from table_name刪除表的全部數(shù)據(jù),對(duì)于MyISAM 會(huì)立刻釋放磁盤空間,InnoDB 不會(huì)釋放磁盤空間;

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

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

示例:查看表占用硬盤空間大小的SQL語(yǔ)句如下:(用M做展示單位,數(shù)據(jù)庫(kù)名: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';

然后執(zhí)行空間優(yōu)化語(yǔ)句,以及執(zhí)行后的表Size變化:

optimize table demo2

再看看這張表的大小,就只剩下表結(jié)構(gòu)size了。

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

2、truncate

Truncate table TABLE_NAME

1、truncate:屬于數(shù)據(jù)庫(kù)DDL定義語(yǔ)言,不走事務(wù),原數(shù)據(jù)不放到 rollback segment 中,操作不觸發(fā) trigger。

執(zhí)行后立即生效,無(wú)法找回
執(zhí)行后立即生效,無(wú)法找回
執(zhí)行后立即生效,無(wú)法找回

2、truncate table table_name 立刻釋放磁盤空間 ,不管是 InnoDB和MyISAM 。truncate table其實(shí)有點(diǎn)類似于drop table 然后creat,只不過這個(gè)create table 的過程做了優(yōu)化,比如表結(jié)構(gòu)文件之前已經(jīng)有了等等。所以速度上應(yīng)該是接近drop table的速度;

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

但對(duì)于不同的類型存儲(chǔ)引擎需要注意的地方是:

  • 對(duì)于MyISAM,truncate會(huì)重置auto_increment(自增序列)的值為1。而delete后表仍然保持auto_increment。
  • 對(duì)于InnoDB,truncate會(huì)重置auto_increment的值為1。delete后表仍然保持auto_increment。但是在做delete整個(gè)表之后重啟MySQL的話,則重啟后的auto_increment會(huì)被置為1。

也就是說(shuō),InnoDB的表本身是無(wú)法持久保存auto_increment。delete表之后auto_increment仍然保存在內(nèi)存,但是重啟后就丟失了,只能從1開始。實(shí)質(zhì)上重啟后的auto_increment會(huì)從 SELECT 1+MAX(ai_col) FROM t 開始。

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

3、drop

Drop table Tablename

1、drop:屬于數(shù)據(jù)庫(kù)DDL定義語(yǔ)言,同Truncate;

執(zhí)行后立即生效,無(wú)法找回
執(zhí)行后立即生效,無(wú)法找回
執(zhí)行后立即生效,無(wú)法找回

2、drop table table_name 立刻釋放磁盤空間 ,不管是 InnoDB 和 MyISAM; drop 語(yǔ)句將刪除表的結(jié)構(gòu)被依賴的約束(constrain)、觸發(fā)器(trigger)、索引(index);  依賴于該表的存儲(chǔ)過程/函數(shù)將保留,但是變?yōu)?invalid 狀態(tài)。

3、小心使用 drop ,要?jiǎng)h表跑路的兄弟,請(qǐng)?jiān)谟喥背晒笤趫?zhí)行操作!訂票電話:400-806-9553

可以這么理解,一本書,delete是把目錄撕了,truncate是把書的內(nèi)容撕下來(lái)燒了,drop是把書燒了

總結(jié)

到此這篇關(guān)于delete、truncate、drop的區(qū)別及該如何選擇的文章就介紹到這了,更多相關(guān)delete、truncate、drop區(qū)別及選擇內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MariaDB(MySQL)創(chuàng)建、刪除、選擇及數(shù)據(jù)類型使用詳解

    MariaDB(MySQL)創(chuàng)建、刪除、選擇及數(shù)據(jù)類型使用詳解

    這篇文章主要介紹了MariaDB(MySQL)創(chuàng)建、刪除、選擇及數(shù)據(jù)類型使用詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • MyBatis動(dòng)態(tài)SQL、模糊查詢與結(jié)果映射操作過程

    MyBatis動(dòng)態(tài)SQL、模糊查詢與結(jié)果映射操作過程

    本篇所講的動(dòng)態(tài)SQL,是mybatis通過標(biāo)簽元素的形式,?如if,?choose,?when,?otherwise,?trim,?where,?set,?foreach等標(biāo)簽完成對(duì)sql的拼接功能,使用起來(lái)也非常靈活方便,這篇文章主要介紹了MyBatis動(dòng)態(tài)SQL、模糊查詢與結(jié)果映射,需要的朋友可以參考下
    2023-08-08
  • MySql連接不上問題及解決

    MySql連接不上問題及解決

    這篇文章主要介紹了MySql連接不上問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MySQL 8.0新特性之隱藏字段的深入講解

    MySQL 8.0新特性之隱藏字段的深入講解

    這篇文章主要給大家介紹了關(guān)于MySQL 8.0新特性之隱藏字段的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • 一篇文章讀懂什么是MySQL索引下推(ICP)

    一篇文章讀懂什么是MySQL索引下推(ICP)

    當(dāng)MySQL使用一個(gè)索引來(lái)檢索表中的行時(shí),可以使用ICP作為一種優(yōu)化方案,下面這篇文章主要給大家介紹了如何通過一篇文章讀懂什么是MySQL索引下推(ICP)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • MySQL實(shí)現(xiàn)樂觀鎖的方式詳解

    MySQL實(shí)現(xiàn)樂觀鎖的方式詳解

    在 MySQL 中,可以通過使用樂觀鎖來(lái)實(shí)現(xiàn)并發(fā)控制,以避免數(shù)據(jù)沖突和并發(fā)更新問題,樂觀鎖是一種樂觀的思想,它假設(shè)并發(fā)操作不會(huì)導(dǎo)致沖突,只有在提交更新時(shí)才會(huì)檢查是否發(fā)生沖突,本文給大家介紹了Mysql如何實(shí)現(xiàn)樂觀鎖,需要的朋友可以參考下
    2023-09-09
  • 數(shù)據(jù)庫(kù)管理中文件的使用教程

    數(shù)據(jù)庫(kù)管理中文件的使用教程

    本文將詳細(xì)介紹數(shù)據(jù)庫(kù)管理中文件的使用,需要了解更多的朋友可以參考下
    2012-11-11
  • MySQL?DDL執(zhí)行方式Online?DDL詳解

    MySQL?DDL執(zhí)行方式Online?DDL詳解

    這篇文章主要介紹了MySQL?DDL執(zhí)行方式Online?DDL詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • 與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(八)--插入 更新 刪除

    與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(八)--插入 更新 刪除

    這一篇《與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(八)》將會(huì)講解MYSQL的插入、更新和刪除語(yǔ)句
    2014-08-08
  • mysql 5.7.11 winx64初始密碼修改

    mysql 5.7.11 winx64初始密碼修改

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.11 winx64初始密碼修改的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04

最新評(píng)論

天水市| 石嘴山市| 昭觉县| 定日县| 龙江县| 拉萨市| 南昌市| 翼城县| 留坝县| 西盟| 手游| 平湖市| 越西县| 霍林郭勒市| 土默特右旗| 旺苍县| 浙江省| 安达市| 凤山市| 虎林市| 依安县| 乌鲁木齐县| 玉树县| 湘潭县| 苍溪县| 务川| 鹤山市| 襄城县| 邓州市| 海林市| 安乡县| 上饶县| 阿勒泰市| 文化| 许昌市| 时尚| 财经| 屏东市| 湘潭县| 德保县| 奎屯市|