数据库为什么会有deadlock问题
https://dev.mysql.com/doc/refman/5.7/en/innodb-deadlock-example.html
官方例子中的A需要等待B释放X锁. 然后由于B持有X锁所以A,B必有一个要抛出异常.
通过测试我发现,理论上和A是否获取了S锁无关(我有一个程序全是update行为, 也发生了x锁冲突), 只要A获取了X锁,并且还没释放 或者释放较慢 那么B竞争X锁的行为就会引发一个异常.
但是这么设计会不会太极端了呢? 一般的程序语言内存操作的时候会让A,B,C,D,E处于等待. 而mysql选择让A,B,C,D,E的其中4个抛出异常.
如果换一种设计方式, A,B都继续等待,直到其中一方放开锁. 或者由开发人员设置锁等待的超时时间难道不是更好吗?