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数据库中具有独占性的锁表的主要内容,如果未能解决你的问题,请参考以下文章

Sqlserver各种数据库的锁表和解锁操作

数据库系列MySql中的select的锁表范围

数据库的锁——代码实战篇

数据库的锁——代码实战篇

两个SQL的锁表问题

数据库的锁:行级锁表锁乐观锁悲观锁的实现原理