产生死锁的原因
产生死锁的原因很多,举个例子:事务 T1 对数据 A 上了 X 锁,现在 T1 要读取数据 B;而另一方面,事务 T2 对数据 B 上了 X 锁,现在 T2 要读取数据 A。T1、T2 都需要对方已经锁定了的数据,相互等待对方释放,这就造成了死锁。
死锁的解决与避免
数据库管理系统(比如 SQL Server)识别到死锁后,会选择互锁的事务中的一个来作为牺牲品,回滚并结束该事务,并抛出一条消息。
现在的数据库管理系统都很优秀,死锁很少发生,但很少不代表不会发生,如果我们在事务中注意一下,又可以进一步减少死锁的发生。下面是 SQL Server 中避免死锁发生的建议: