Transaction And Lock--由外键导致的死锁
2014-01-16 18:20
375 查看
死锁发生情况:
1. 存在表A和表B,表A的主键是表B的外键
2.事务A在表A上申请到X锁以修改表A中数据和删除表A中的数据,然后需要检查表B中的数据是否满足外键约束,从而需要Range锁来锁住表B
3.事务B在表B上申请到X锁以修改表B中数据,然后向表A申请S锁来查询数据
以上情况表造成资源环状阻塞,从而应发死锁。
解决办法:
1. 从设计角度来看,应避免修改表A中主键的值
2. 对表B上的外键列建立索引,从而使事务A发生时将range锁放到索引上,从而降低死锁发生的概率
1. 存在表A和表B,表A的主键是表B的外键
2.事务A在表A上申请到X锁以修改表A中数据和删除表A中的数据,然后需要检查表B中的数据是否满足外键约束,从而需要Range锁来锁住表B
3.事务B在表B上申请到X锁以修改表B中数据,然后向表A申请S锁来查询数据
以上情况表造成资源环状阻塞,从而应发死锁。
解决办法:
1. 从设计角度来看,应避免修改表A中主键的值
2. 对表B上的外键列建立索引,从而使事务A发生时将range锁放到索引上,从而降低死锁发生的概率
相关文章推荐
- Transaction And Lock--唯一索引下INSERT导致的死锁
- Transaction And Lock--由Lookup导致的死锁情况
- Transaction And Lock--死锁错误号1205
- 【Mysql】mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法
- Notes: Process in Operation System and Dead Lock 操作系统中的进程和死锁问题
- Java输出导致死锁,at java.io.PrintStream.println(PrintStream.java:805) - waiting to lock <0x0000000494fa83
- Compare PostgreSQL and Oracle dead lock detect and transaction
- Transaction And Lock--解决死锁/锁的几种有效方式
- Notes: Process in Operation System and Dead Lock 操作系统中的进程和死锁问题
- 重复add或update导致ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
- 内存释放时的死锁bug导致lock_wait
- About transaction lock and V$lock view
- Notes: Process in Operation System and Dead Lock 操作系统中的进程和死锁问题
- Notes: Process in Operation System and Dead Lock 操作系统中的进程和死锁问题
- Notes: Process in Operation System and Dead Lock 操作系统中的进程和死锁问题
- Transaction (Process ID ) was deadlocked on lock resources with another process and has been chosen
- ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction(死锁)
- mysql死锁,等待资源,事务锁,Lock wait timeout exceeded; try restarting transaction解决
- 未加索引的外键导致的死锁模拟实验以及问题
- Transaction And Lock--锁相关基础