MySQL死锁例子

一、mysql死锁

比如2个事务,事务A、事务B,都查询id=74和id=78的数据,并加锁

事务A,select * from t where id=74 for update,对id=74数据加锁

然后,事务B,select * from t where id=78 for update,对id=78数据加锁

事务A,此时又需要查询id=78的数据,于是select * from t where id=78 for update,因为事务B已经加过id=78的锁了,所以事务A就会一直等待

事务B,此时又需要查询id=74的数据,于是select * from t where id=74 for update,因为事务A已经加过id=74的锁了,所以事务B也会一直等待

此时就发生了死锁,会等待系统设置的超时时间,mysql会检查这种死锁,超过超时时间(mysql设置innodb_lock_wait_timeout),然后报错回滚,才打破死锁

1.1 navicat新建一个person表

1.2 开启事务B

1.3 开启事务B

1.4 回滚与提交

参考

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值