mysql 死锁问题

新手上路,请多包涵

我首先开启了一个事务查询并加排他锁
image.png
然后试了下另外一个查同样id 的事务是成功的
image.png
但是仅单条或者不commit就是锁等待
image.png
不是应该只要是查询同一条数据有排他锁就会死锁嘛

阅读 1.6k
2 个回答

死锁是两个事务或多个事务在同一资源上相互占用,并请求锁定对方占用的资源。
你这里仅仅是一个事务占用了另一个事务的资源,没有实现双方互相占用,这不会产生死锁。
你可以这样试一下。

-- transaction1
begin;
update test_info set name="123" where id=1;
update test_info set name="321" where id=2;

 

-- tansaction2
begin;
update test_info set name="111" where id=2;
update test_info set name="222" where id=1;

两个事务都执行第一条update语句,当再都执行第二条update时,双方都在等待对方释放锁资源,才能update数据行,由此就会产生死锁。

我不懂你执行第二条语句是怎么成功的,id=3已经被第一个事务上行锁了,理论上你的第二个语句是被堵塞的。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题