delete 会不会锁表_truncate 和 delete
truncate 和 delete 是 MySQL 中清空表数据的两种方式,平常使用的时候两者好像都差不多,选谁都可以。实际上它们之间是有本质区别的,只有深入理解了它们的差异,在以后的开发中才能根据具体场景运用自如
思考
在讲 truncate 和 delete 的区别之前,不妨先看看下面的问题,带着问题边思考边往下看
问题:如上图所示,红色框(1) 和 红色框(2) 中 id 分别是多少
delete 简述
删除表全部数据或者部分数据,删除的时候是一行一行删除的,所以删除表全部数据时速度比较慢
语句后面可以用 where 过滤待删除的行,比较灵活
语句执行之后会返回本次删除的行数
truncate 简述
删除表全部数据,相当于先 drop table 然后 create table, 速度快语句后面不能接过滤条件语句执行后没有返回值,或者说返回值没有具体的含义
区别
虽然 truncate 和 delete 很相似,但它们有以下不同之处
delete 是一行一行的删除数据,truncate 是重新创建表,所以truncate 比 delete 速度快,特别是针对大表
其他表有引用本表列的外键字时,truncate 会执行失败,delete 可以执行
上图中 tb
表的 idb
列是ta
表的ida
列的外键引用,truncate table ta
执行失败, truncate table ta 能执行成功
truncate 是DDL语句,所以不能回滚,delete 是DML语句,可以回滚
truncate 返回值无意义, delete 返回本次删除的行数
针对 AUTO_INCREMENT 列,truncate tablename 会把列值重置为起始值,而 delete from tablename 则不会重置(上面的思考题用到了这条知识点)
delete 的优化
前面提到使用 delete 清空大表是速度比较慢,为了保证 delete 语句不会占用大量的时间,可以使用 limit row_count
语句来指定单次删除的最大行数,如果删除的行数大于等于单次删除的最大行数,重复执行 delete 语句直到删除的行数小于单次删除的最大值
答案
有了前面的介绍之后,思考题的答案应该很清晰了
因为表 tt
中 id
列是自增的,truncate 清空表数据会重置自增列,而 delete则不会,所以思考题中 (1) 处的 id 分别是 3、4, (2) 处的 id 分别是 1,2
具体的输出如下图:
delete 会不会锁表_truncate 和 delete相关推荐
- delete 会不会锁表_MySQL的insert into select 引发锁表
上周五HaC我要上线,有一个脚本需要执行,执行前需要备份一个表. 运维大佬:"这个表的备份为什么要这么久,,??" 1秒过去了--2秒过去了-- 期间运营反馈系统出现大量订单超时情 ...
- Mysql 会导致锁表的语法
转自:http://blog.csdn.net/lifaming15/article/details/47904557 最近再找一些MySQL锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理 ...
- php delete和truncate,TRUNCATE 删除表,无法回退。默认选择为整个表的内容,所以不能加条件。...
TRUNCATE 删除表,无法回退.默认选择为整个表的内容,所以不能加条件. DELETE 删除表,可以回退.可以带where 条件.建议使用delete.但是TRUNCATE 删除表数据比delet ...
- insert 锁表 mysql_mysql insert锁机制【转】
最近再找一些MySQL锁表原因,整理出来一部分sql语句会锁表的,方便查阅,整理的不是很全,都是工作中碰到的,会持续更新 笔者能力有限,如果有不正确的,或者不到位的地方,还请大家指出来,方便你我,方便 ...
- MySQL锁表了怎么办?
发生表锁的一些原因 1.锁表发生在insert update .delete 中 2.锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回 ...
- mysql锁全表语句_MySql锁表语句
2019独角兽企业重金招聘Python工程师标准>>> 方便个人记忆: Mysql 5.5 基于innodb 引擎 insert into table1 values select ...
- mysql 锁表的情况
mysql其实在我们使用的时候比较容易造成表被锁的情况,例如以下的几种方式 目前有表 test , 字段分别有 id,name,age show full PROCESSLIST 查询表的执行情况 ...
- 数据库锁表原因及解决思路
1.锁表发生在insert update .delete 中 2.锁表的原理是 数据库使用独占式封锁机制,当执行上面的语句时,对表进行锁住,直到发生commite 或者 回滚 或者退出数据库用户 3. ...
- 锁表:MyISAM非聚集索引和InnoDB聚集索引的各种锁表问题
参考文献 Mysql数据库中的各种锁_张花生的博客-CSDN博客_数据库锁 面试官:MySQL死锁有哪些场景?如何避免? 概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存 ...
最新文章
- HDU 2149 Public Sale (博弈)
- 【Windows10】我的电脑从新装到优化配置
- 模型优化:BatchNorm合并到卷积中
- java输出一些内容到日志文件
- 【离散数学】代数系统的同态(同构)
- Linux换行符与windows换行符
- 各种隐藏WebShell、创建、删除畸形目录、特殊文件名的方法
- 微信小程序后端用python_微信小程序后端开发用python
- ad中按钮开关的符号_电工最常用电气元件实物及对应符号
- 如何将图片压缩到200K以内,有什么好方法吗?
- Git同时配置github和gitee
- drupal主题开发_开发人员降低了Drupal的进入门槛
- 兆比特每秒和兆字节每秒_Mbps和MB/S一样吗?我们平时经常说的多少M带宽是哪个?...
- 杜绝采购欺诈:利用SRM系统监控采购计划
- 360校招笔试算法题
- 【教程篇】Blender实例教程(一)——制作一个酷炫的三叶草星
- RK3568 外接 PCF8563 RTC
- Java8-使用stream.sorted()对List排序
- 从http协议看百度360大战
- 【Java开发】 Mybatis-Plus 02:Mapper-CRUD+自动填充+乐观锁
热门文章
- js 浅拷贝直接赋值_JS中实现浅拷贝和深拷贝的代码详解
- java gt lt_Java运算符,,|,||,^,lt;lt;,gt;gt;,~,gt;gt;gt;
- windows10怎么安装python第三方库_怎么在windows下安装python第三方包
- python找出矩阵中的马鞍点_矩阵的马鞍点
- 全国计算机等级考试和职称考试题库,全国职称计算机等级考试题库及答案
- JAVA用JComboBox_java JCombobox和JList的使用
- 送30块树莓派PICO 开发板!
- 本科、硕士、博士的区别(终极版,太形象了!)
- 《管理转型》——读书随笔
- 为什么grpc不支持php,带入gRPC:让你的服务同时提供 HTTP 接口