为什么我不应该使用带锁定读取的“可重复读取”(select..for update)“?

时间:2017-09-15 01:56:38

标签: mysql deadlock read-committed

在Mysql文档中:“https://dev.mysql.com/doc/refman/5.7/en/innodb-deadlocks-handling.html

它提到:“如果您使用锁定读取(SELECT ... FOR UPDATE或SELECT ... LOCK IN SHARE MODE),请尝试使用较低的隔离级别,例如READ COMMITTED。”< / p>

有人能告诉我为什么我不能使用“可重复读取”吗?例子很好。

干杯

1 个答案:

答案 0 :(得分:4)

如果您使用read-committed,InnoDB会避免使用某些类型的锁。这可以帮助您避免死锁。

我设计了一个完整的演示文稿:InnoDB Locking Explained with Stick Figures

但是你几乎永远无法避免100%的死锁情况。它们不是一个错误,它们是并发系统的自然组成部分。您可以减少死锁发生的频率,但您可能也习惯了解死锁。设计代码以捕获异常并在发生死锁时重试数据库操作。