数据库中死锁

MySQL里都是行锁,如下图 

数据库中死锁

 死锁产生的必要条件,其实和操作系统里的并发控制类似,都是四个必要条件:互斥、持有等待、不可剥夺、循环等待。

数据库中死锁

数据库中死锁

 上述两种数据库都无法避免或打破。

不可剥夺可以通过回滚来打破

数据库中死锁

循环等待也可以通过程序设计检查而避免。 

数据库中死锁

 数据库中有两种锁:排他锁(X),共享锁(S)

数据库中死锁

数据库加锁方式:外部加锁直接通过SQL语句,如果只有select则没有加锁,加了share mode则是共享锁,update则是排他锁

数据库中死锁

 

数据库中死锁

数据库中死锁

 数据库会自动帮我们分析产生死锁的SQL语句,我们只需要分析并解决死锁即可。

数据库中死锁