gpt4 book ai didi

mysql - 从 JPA PESSIMISTIC 锁获取的数据库行的物理锁

转载 作者:行者123 更新时间:2023-11-29 06:18:21 26 4
gpt4 key购买 nike

根据 JPA 2.1 规范...

The lock modes PESSIMISTIC_READ, PESSIMISTIC_WRITE, and PESSIMISTIC_FORCE_INCREMENT are used to immediately obtain long-term database locks.

我假设悲观锁总是会触发数据库上的 SELECT ... FOR UPDATE SQL,无论使用何种锁定模式。现在有三个问题:

  1. 该假设是否正确?如果正确,是否存在与此规则不同的异常(exception)情况?
  2. 给定一个 SELECT ... FOR UPDATE 锁定行。除了锁定它的事务之外,任何其他事务都不能更新锁定的行?
  3. 可以通过对事务执行提交或回滚来释放锁。如果应用程序(以及锁定行的事务)在没有对事务进行提交或回滚的情况下突然终止,锁会发生什么情况?

最佳答案

对于问题1和2,你的假设是正确的:

  1. 是 - 悲观锁通常使用 SELECT ... FOR UPDATE,因为大多数数据库和 JPA 实现只支持这种类型的锁。在这种情况下,READ 和 WRITE block 之间没有区别,只要两者都表现为 WRITE 锁,JPA 规范就允许这样做。

  2. 是 - 锁定的行不能被任何其他事务修改。在 WRITE 锁的情况下(大多数情况下也用于 READ 锁 - se answer for 1),在释放锁之前也无法读取锁定的行。请注意,同一表中其他未锁定的行可以自由读取和修改。

同时回答问题 3:

  1. 是 - 在提交或回滚时释放锁。但是,当发生错误、连接断开或事务时间过长时,回滚也会自动发生。因此,当应用程序死亡时,会立即触发回滚。如果没有,它会在超时(通常为 5 分钟)后回滚。

关于mysql - 从 JPA PESSIMISTIC 锁获取的数据库行的物理锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34620484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com