我试图在H2数据库中使用行级锁定。有没有办法在单个连接中获取和释放记录级锁?H2数据库释放锁
SELECT *
FROM "locks"
WHERE key = 'lock1'
FOR UPDATE;
SELECT *
FROM "locks"
WHERE key = 'lock2'
FOR UPDATE;
现在我想RELASE 锁1,但继续持有锁2。 我试图插入“BEGIN TRANSACTION;”在lock2之前,但是COMMIT释放两个锁。
此外: 我打算使用H2像本地缓存服务器数据库。 目标是实现交叉程序同步(java)。 数据将不会以1:1同步,程序将控制要存储的内容。 FileChannels在Linux中不起作用,套接字工作正常,但我发现它们很难看。 任务:
- 数据库与服务器同步;只有一个程序应该执行同步。
- 写日志;程序使用2个日志文件并从一个切换到另一个。为防止发生冲突,我们应该锁定文件的写入时间。
- 可能是别的。
在这一刻,我看到两种方式
- 创建新的连接每个时间和任务执行后释放。连接建立需要近600ms。
- 使用临时表:CREATE AND DROP TEMPORARY TABLE tmp_lock1()。需要2ms。问题:如果有2个连接并且第一次创建临时表并突然完成工作(例如某个错误),则在第二个程序工作之前,表仍然存在。