【发布时间】:2015-09-08 22:51:49
【问题描述】:
简而言之:
这个查询会在 sqlite3 数据库上安装 EXCLUSIVE 锁吗?换句话说 - 是否存在竞争条件?
INSERT INTO reserves (size, owner_id)
WITH cte as (
SELECT sum(size) total_size FROM (
SELECT size FROM files
UNION ALL
SELECT size FROM reserves
)
)
SELECT 10, 'owner-id'
WHERE (select total_size from cte) < 20 OR(select total_size from cte) IS NULL
;
详细说明:
我有两个缓存实体表 - 文件和空间储备。这两种实体类型都使用一些硬盘驱动器容量,此参数表示为size 列。此外,我可以使用的上述容量也有一些限制。同时从多个进程访问数据库,因此我必须以原子方式向数据库添加储备。
我正在使用http://cppcms.com/sql/cppdb/ 库,它不支持sqlite BEGIN EXCLUSIVE TRANSACTION; 命令,所以我在上面写了查询。它会按预期工作吗?
【问题讨论】: