我需要用学说锁定整个表(而不是单行),如果可能的话,我想在没有本机查询的情况下这样做。
悲观锁定的文档仅描述了如何通过这些方法锁定特定实体:
- 实体管理器#find
- 实体管理器#lock
- 查询#setLockMode
我有一个事务需要插入一行,其值取决于表中其余行的值,因此我需要防止两个事务同时在该表上执行。
我正在使用显式事务划分,它应该可以很好地与锁定配合使用(根据上面的文档)。
注意:在这种情况下,乐观锁定还不够好,我负担不起重试事务。此外,查询不应该很慢,因此性能不是问题。
编辑:我举个例子。想象一下,您想手动构建一个 auto_increment,并且您必须从表中选择 max() 以获取上一个结果才能插入下一个结果。您必须确保没有两个事务尝试插入相同的值,以防它们同时选择 max()。
当 auto_increment 不好时,我正在寻找此问题的通用解决方案,例如使用字符串、多列、散列或您必须对前一个行集进行的任何计算。
锁定是一个可靠的解决方案,与乐观锁定不同,您不必重试错误。
那么,有没有办法在学说中使用表锁定?