mysql - 操作一张表时出现意外死锁
问题描述
最近我在产品环境上遇到了一些意想不到的僵局。场景很简单:假设我们有一张桌子
CREATE TABLE customer
(
id bigint(20) auto_increment,
customer_id varchar(255),
name varchar(255),
update_time datetime,
primary key (id),
unique key(customer_id)
)
假设我在这张表中有一条记录
(0, '74597229-fef2-11ea-994a-6c92bf29c398', 'someCustomer', '1970-01-01 00:00:00')
然后我在下面进行了一些操作:
start transaction; -- 0
update customer set name = 'deadlockTest' where customer_id = '74597229-fef2-11ea-994a-6c92bf29c398'; -- 1
delete from customer where customer_id = '74597229-fef2-11ea-994a-6c92bf29c398'; --3
commit; -- 5
update customer set update_time = now() where customer_id in ('74597229-fef2-11ea-994a-6c92bf29c398'); -- 2
update customer set update_time = now() where customer_id in ('74597229-fef2-11ea-994a-6c92bf29c398'); -- 4
'--'后面的数字表示操作顺序,
一旦我执行第 5 步(提交),第 4 步将引发死锁异常
用'```'包围的代码块表示一个新线程(或无论如何都是一个新窗口)
- innodb 版本是 5.6.23
这真是不可思议
解决方案
推荐阅读
- android - 无法更改 Kotlin 中的全局变量值
- iis - iis 10 .net core 2.1 网站配置错误
- rest - 如何使用 Neo4j Rest APIs 进行简单的匹配/返回密码
- javascript - 我正在尝试创建一个 PDF,这样当我在文本字段中输入时,它会自动为我检查一个复选框
- json - jq - 到 csv 的 json 字典列表
- excel - 从属性中获取代号并作为变量传递
- javascript - 同时使用 Vuex 和发出事件
- javascript - 对于 SPA,您应该将登录页面与根 URL 分开吗?
- r - 将向量中的日期转换为 Excel 日期数字 (R)
- reactjs - Sitecore:在 SXA 站点中使用 JSS React 组件