如何将SQLite延迟事务升级到RESERVED

时间:2017-01-07 18:35:02

标签: sqlite transactions

我正在将数据插入数据库,其中每个“批处理”必须具有批次本身的新唯一ID。我可以添加一个批处理表并使用它的AUTOINCREMENT id,但我不需要它用于其他任何东西,所以它似乎过多了。

我正在做一个SELECT MAX(batchid)+ 1 FROM FROM项目,然后用它来插入,这当然容易出现竞争条件(2个新批次同时会产生冲突的ID)

使用IMMEDIATE事务是不切实际的。在进行选择之前是否可以强制将DEFERRED事务升级为EXCLUSIVE?

一些想法;

  • 我可以做一些No-op廉价更新吗?
  • 现在有些明确的指示是独占的吗?
  • INSERT INTO items (batchid, value) VALUES ((SELECT MAX(batchid)+1 FROM items), "monkey"), ((SELECT MAX(batchid)+1 FROM items), "banana"),我们的想法是选择现在明确是更新的一部分吗?

1 个答案:

答案 0 :(得分:1)

确实可以将批次ID查找放入子查询中,但这会有很多重复。

最简单的方法是做一些事情来写入数据库,例如PRAGMA user_version = x