如何保证带有子查询的原子SQL插入?

问题描述 投票:2回答:3

给出这样的简化表结构:

 CREATE TABLE t1 (
        id INT,
        num INT,
        CONSTRAINT t1_pk
        PRIMARY KEY (id),
        CONSTRAINT t1_uk
        UNIQUE (id, num)
    )

我可以使用这样的子查询来插入记录而不引起竞争条件吗?

INSERT INTO t1 (
    id,
    num
) VALUES (
    1,
    (
        SELECT MAX(num) + 1
        FROM   t1
    )
)

还是子查询不是原子的?我担心同时INSERT会为num捕获相同的值,然后导致唯一约束冲突。

sql oracle race-condition
3个回答
6
投票

0
投票

0
投票
好像
© www.soinside.com 2019 - 2024. All rights reserved.