H2数据库中具有独占性的锁表
Posted
技术标签:
【中文标题】H2数据库中具有独占性的锁表【英文标题】:Lock Table with exclusive in H2 database 【发布时间】:2015-07-13 18:01:51 【问题描述】:我无法将 Oracle 语法转换为 H2 语法:
例如(甲骨文):
LOCK TABLE CAR_CHIP_ID_LOCK IN EXCLUSIVE MODE
在 H2 中会导致(语法错误)
如何将oracle语法改为h2?我试过 Lock_mode 但它不起作用,默认情况下 MVCC 为 true v1.4+
【问题讨论】:
在查看h2
文档中的操作方法时,您发现了什么?
我没有看到任何等价物。在 h2 中它使用 'set lock_mode' / 'MVCC=TRUE' 但我不想在 h2 中设置或更改配置,因为我只是用它来测试。 h2database.com/html/advanced.html
另一个很好的例子,说明为什么您不应该使用与生产环境不同的 DBMS 进行测试。
移植数据库后端通常不仅仅是转录语法。在这种情况下,您需要知道锁的用途。因此,您可以评估如何在新数据库中实现目标。 IME 显式表锁在使用隔离事务的应用程序中很少见。如果锁是冗余的并具有适当的 Tx 隔离,我不会感到惊讶。
也相关:meta.stackexchange.com/a/243965/159703。 X/Y 问题出现在这里,因为您试图在 h2 中实现目标 X,使用适用于 Oracle 的解决方案 Y。不要挂断Y
【参考方案1】:
似乎在 oracle 和 h2 中都有效的是
select * from CAR_CHIP_ID_LOCK for update;
另见How to lock whole entity (table) in JPA entity manager
【讨论】:
以上是关于H2数据库中具有独占性的锁表的主要内容,如果未能解决你的问题,请参考以下文章