次のような単純化されたテーブル構造が与えられます。
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
同時にs が同じ値を取得しnum
、一意の制約違反を引き起こすことを心配しています。