写博客至今一年有余,感觉还没写出几篇比较有质量的文章,首先确实是自己有点懒,没有及时更新博客,但是还有一方面是有些笔记不适合分享出来,所以造成了没有几篇是比较有质量的,今天要整理的文章是关于这两天学习的mysql死锁和锁等待笔记,笔者觉得是比较有趣的,也算是比较有质量的文章,希望读者看完之后有所收获。
关于mysql锁的一些基础知识后期再更新一篇博客,这里先直接进入死锁的案例,不明白基础知识的读者请先去查找其他相关的博客学习以下。
关于mysql锁等待和锁超时可以查看笔者专门的文章:https://blog.csdn.net/LLF_1241352445/article/details/83473783
案例1:Record Lock导致的死锁——两个不同的事务对两个不同的资源获取排他锁的顺序不一致导致的死锁;(这边使用select for update进行学习,实际企业应用中很少有该应用场景,更多的是update或者insert或者两者混合操作,该操作同理)
表结构:cre_course(primary key CSE_ID,name)
- 在sessionA开启事务,设置set autocommit = 0;
- 执行加排他锁操作:select * from cre_course WHERE CSE_ID = "1" for UPDATE ,此时相当于在sessionA锁定了资源1;
- 在sessionB开