日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

delete 会不会锁表_truncate 和 delete

發(fā)布時間:2023/12/18 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 delete 会不会锁表_truncate 和 delete 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

truncate 和 delete 是 MySQL 中清空表數(shù)據(jù)的兩種方式,平常使用的時候兩者好像都差不多,選誰都可以。實際上它們之間是有本質(zhì)區(qū)別的,只有深入理解了它們的差異,在以后的開發(fā)中才能根據(jù)具體場景運用自如

思考

在講 truncate 和 delete 的區(qū)別之前,不妨先看看下面的問題,帶著問題邊思考邊往下看

問題:如上圖所示,紅色框(1) 和 紅色框(2) 中 id 分別是多少

delete 簡述

刪除表全部數(shù)據(jù)或者部分數(shù)據(jù),刪除的時候是一行一行刪除的,所以刪除表全部數(shù)據(jù)時速度比較慢

語句后面可以用 where 過濾待刪除的行,比較靈活

語句執(zhí)行之后會返回本次刪除的行數(shù)

truncate 簡述

刪除表全部數(shù)據(jù),相當于先 drop table 然后 create table, 速度快語句后面不能接過濾條件語句執(zhí)行后沒有返回值,或者說返回值沒有具體的含義

區(qū)別

雖然 truncate 和 delete 很相似,但它們有以下不同之處

  • delete 是一行一行的刪除數(shù)據(jù),truncate 是重新創(chuàng)建表,所以truncate 比 delete 速度快,特別是針對大表

  • 其他表有引用本表列的外鍵字時,truncate 會執(zhí)行失敗,delete 可以執(zhí)行

上圖中?tb?表的?idb?列是ta表的ida列的外鍵引用,truncate table ta?執(zhí)行失敗, truncate table ta?能執(zhí)行成功

  • truncate 是DDL語句,所以不能回滾,delete 是DML語句,可以回滾

  • truncate 返回值無意義, delete 返回本次刪除的行數(shù)

  • 針對 AUTO_INCREMENT 列,truncate tablename 會把列值重置為起始值,而 delete from tablename 則不會重置(上面的思考題用到了這條知識點)

delete 的優(yōu)化

前面提到使用 delete 清空大表是速度比較慢,為了保證 delete 語句不會占用大量的時間,可以使用?limit row_count?語句來指定單次刪除的最大行數(shù),如果刪除的行數(shù)大于等于單次刪除的最大行數(shù),重復(fù)執(zhí)行 delete 語句直到刪除的行數(shù)小于單次刪除的最大值

答案

有了前面的介紹之后,思考題的答案應(yīng)該很清晰了

因為表?tt?中?id?列是自增的,truncate 清空表數(shù)據(jù)會重置自增列,而 delete則不會,所以思考題中 (1) 處的 id 分別是 3、4, (2) 處的 id 分別是 1,2

具體的輸出如下圖:

總結(jié)

以上是生活随笔為你收集整理的delete 会不会锁表_truncate 和 delete的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。