给出这样的简化表结构:
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
捕获相同的值,然后导致唯一约束冲突。