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

mysql中的delete,drop和truncate有什么區(qū)別

 更新時(shí)間:2022年06月09日 08:33:28   作者:??Java中文社群????  
這篇文章主要介紹了mysql中的delete,drop和truncate有什么區(qū)別,三者的用法和使用場景又完全不同,接下來我們來看看具體的區(qū)別吧,希望對你的學(xué)習(xí)有所幫助

前言:

在 MySQL 中,刪除的方法總共有 3 種:delete、truncate、drop,而三者的用法和使用場景又完全不同,接下來我們具體來看。

1.delete

detele 可用于刪除表的部分或所有數(shù)據(jù),它的使用語法如下:

delete from table_name [where...] [order by...] [limit...]

PS:[] 中的命令為可選命令,可以被省略。

如果我們要?jiǎng)h除學(xué)生表中數(shù)學(xué)成績排名最高的前 3 位學(xué)生,可以使用以下 SQL:

delete from student order by math desc limit 3;

1.1 delete 實(shí)現(xiàn)原理

在 InnoDB 引擎中,delete 操作并不是真的把數(shù)據(jù)刪除掉了,而是給數(shù)據(jù)打上刪除標(biāo)記,標(biāo)記為刪除狀態(tài),這一點(diǎn)我們可以通過將 MySQL 設(shè)置為非自動(dòng)提交模式,來測試驗(yàn)證一下。

非自動(dòng)提交模式的設(shè)置 SQL 如下:

set autocommit=0;

之后先將一個(gè)數(shù)據(jù) delete 刪除掉,然后再使用 rollback 回滾操作,最后驗(yàn)證一下我們之前刪除的數(shù)據(jù)是否還存在,如果數(shù)據(jù)還存在就說明 delete 并不是真的將數(shù)據(jù)刪除掉了,只是標(biāo)識數(shù)據(jù)為刪除狀態(tài)而已,驗(yàn)證 SQL 和執(zhí)行結(jié)果如下圖所示: 

1.2 關(guān)于自增列

在 InnoDB 引擎中,使用了 delete 刪除所有的數(shù)據(jù)之后,并不會(huì)重置自增列為初始值,我們可以通過以下命令來驗(yàn)證一下: 

2.truncate

truncate 執(zhí)行效果和 delete 類似,也是用來刪除表中的所有行數(shù)據(jù)的,它的使用語法如下:

truncate [table] table_name

truncate 在使用上和 delete 最大的區(qū)別是,delete 可以使用條件表達(dá)式刪除部分?jǐn)?shù)據(jù),而 truncate 不能加條件表達(dá)式,所以它只能刪除所有的行數(shù)據(jù),比如以下 truncate 添加了 where 命令之后就會(huì)報(bào)錯(cuò): 

2.1 truncate 實(shí)現(xiàn)原理

truncate 看似只刪除了行數(shù)據(jù),但它卻是 DDL 語句,也就是 Data Definition Language 數(shù)據(jù)定義語言,它是用來維護(hù)存儲數(shù)據(jù)的結(jié)構(gòu)指令,所以這點(diǎn)也是和 delete 命令是不同的,delete 語句屬于 DML,Data Manipulation Language 數(shù)據(jù)操縱語言,用來對數(shù)據(jù)進(jìn)行操作的。 為什么 truncate 只是刪除了行數(shù)據(jù),沒有刪除列數(shù)據(jù)(字段和索引等數(shù)據(jù))卻是 DDL 語言呢? 這是因?yàn)?truncate 本質(zhì)上是新建了一個(gè)表結(jié)構(gòu),再把原先的表刪除掉,所以它屬于 DDL 語言,而非 DML 語言。

2.2 重置自增列

truncate 在 InnoDB 引擎中會(huì)重置自增列,如下命令所示: 

3.drop

drop 和前兩個(gè)命令只刪除表的行數(shù)據(jù)不同,drop 會(huì)把整張表的行數(shù)據(jù)和表結(jié)構(gòu)一起刪除掉,它的語法如下:

DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [,tbl_name]

其中 TEMPORARY 是臨時(shí)表的意思,一般情況下此命令都會(huì)被忽略。

drop 使用示例如下: 

4.三者的區(qū)別

  • 數(shù)據(jù)恢復(fù)方面:delete 可以恢復(fù)刪除的數(shù)據(jù),而 truncate 和 drop 不能恢復(fù)刪除的數(shù)據(jù)。
  • 執(zhí)行速度方面:drop > truncate > delete。
  • 刪除數(shù)據(jù)方面:drop 是刪除整張表,包含行數(shù)據(jù)和字段、索引等數(shù)據(jù),而 truncate 和 drop 只刪除了行數(shù)據(jù)。
  • 添加條件方面:delete 可以使用 where 表達(dá)式添加查詢條件,而 truncate 和 drop 不能添加 where 查詢條件。
  • 重置自增列方面:在 InnoDB 引擎中,truncate 可以重置自增列,而 delete 不能重置自增列。

總結(jié)

delete、truncate 可用于刪除表中的行數(shù)據(jù),而 drop 是把整張表全部刪除了,刪除的數(shù)據(jù)包含所有行數(shù)據(jù)和字段、索引等數(shù)據(jù),其中 delete 刪除的數(shù)據(jù)可以被恢復(fù),而 truncate 和 drop 是不可恢復(fù)的,但在執(zhí)行效率上,后兩種刪除方式又有很大的優(yōu)勢,所以要根據(jù)實(shí)際場景來選擇相應(yīng)的刪除命令,當(dāng)然 truncate 和 drop 這些不可恢復(fù)數(shù)據(jù)的刪除方式使用的時(shí)候也要小心。

到此這篇關(guān)于mysql中的delete,drop和truncate有什么區(qū)別的文章就介紹到這了,更多相關(guān)mysql delete drop truncate內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql 8.0.24 安裝配置方法圖文教程

    mysql 8.0.24 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.24 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • MySQL?去除字符串中的括號以及括號里的所有內(nèi)容

    MySQL?去除字符串中的括號以及括號里的所有內(nèi)容

    這篇文章主要介紹了MySQL?去除字符串中的括號以及括號里的所有內(nèi)容,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 軟件測試-MySQL(六:數(shù)據(jù)庫函數(shù))

    軟件測試-MySQL(六:數(shù)據(jù)庫函數(shù))

    這篇文章主要介紹了MySQL數(shù)據(jù)庫函數(shù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 關(guān)于MySQL實(shí)現(xiàn)指定編碼遇到的坑

    關(guān)于MySQL實(shí)現(xiàn)指定編碼遇到的坑

    這篇文章主要介紹了一個(gè)關(guān)于MySQL指定編碼實(shí)現(xiàn)的小坑,文中大家需要注意如果有需要保存emoji符號的字段,記得一定要指定編碼為 utf8mb4,感興趣的朋友一起看看吧
    2021-10-10
  • MySQL數(shù)據(jù)歸檔小工具mysql_archiver詳解

    MySQL數(shù)據(jù)歸檔小工具mysql_archiver詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)歸檔小工具mysql_archiver詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Mysql提升索引效率優(yōu)化的八種方法總結(jié)

    Mysql提升索引效率優(yōu)化的八種方法總結(jié)

    索引實(shí)際上也是一張表,保存了主鍵和索引的字段,并且指向?qū)嶓w表的記錄,所以索引也是需要占用空間的,這篇文章主要給大家介紹了關(guān)于Mysql提升索引效率優(yōu)化的八種方法,需要的朋友可以參考下
    2024-04-04
  • SQL性能優(yōu)化之壓測404的根因追查與解決方案

    SQL性能優(yōu)化之壓測404的根因追查與解決方案

    測試人員對任務(wù)列表查詢接口進(jìn)行并發(fā)壓測時(shí),出現(xiàn)大量 404 響應(yīng)錯(cuò)誤,經(jīng)初步排查,這些 404 并非業(yè)務(wù)邏輯主動(dòng)返回,而是接口響應(yīng)超時(shí)后由網(wǎng)關(guān)/Nginx 拋出的超時(shí)錯(cuò)誤,下面我們就來看看如何優(yōu)化這一問題吧
    2026-03-03
  • MySql索引詳細(xì)介紹及正確使用方法

    MySql索引詳細(xì)介紹及正確使用方法

    這篇文章主要介紹了MySql索引詳細(xì)介紹及正確使用方法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • JDBC連接MySQL出現(xiàn)的問題

    JDBC連接MySQL出現(xiàn)的問題

    采用JDBC連接MySQL數(shù)據(jù)庫,JDBC驅(qū)動(dòng)已經(jīng)添加到eclipse的項(xiàng)目構(gòu)建路徑里了,按理來說應(yīng)該一切正常。運(yùn)行項(xiàng)目后提示“無法加載驅(qū)動(dòng)”。
    2010-12-12
  • MySQL 覆蓋索引實(shí)戰(zhàn)案例詳解

    MySQL 覆蓋索引實(shí)戰(zhàn)案例詳解

    本文通過實(shí)戰(zhàn)案例揭示覆蓋索引對MySQL性能優(yōu)化的核心價(jià)值,解決因回表導(dǎo)致的55秒慢查詢問題,優(yōu)化后執(zhí)行時(shí)間降至2秒,設(shè)計(jì)需兼顧字段完整性、順序合理性及讀寫平衡,是提升查詢效率的關(guān)鍵策略,感興趣的朋友跟隨小編一起看看吧
    2025-07-07

最新評論

临沂市| 理塘县| 绥阳县| 乌恰县| 新邵县| 舟山市| 罗江县| 榆中县| 庆阳市| 集贤县| 武胜县| 岚皋县| 安康市| 织金县| 县级市| 鹤庆县| 庄河市| 修水县| 丹东市| 鄯善县| 修文县| 白水县| 太康县| 乌拉特前旗| 周口市| 武安市| 通道| 建水县| 贺兰县| 娄底市| 庆元县| 苏州市| 遵化市| 曲麻莱县| 扶沟县| 辛集市| 成安县| 宜城市| 青海省| 东台市| 二手房|