我想知道如何在DB2中有效地执行 insert-if-not-exists 操作,而不会导致唯一的约束违规。
我尝试在DB2 LUW中使用MERGE
语句,但我担心重复插入的并发性。我在documentation中读到,更改隔离级别可能有助于解决这些错误。根据不同的堆栈溢出question,WITH RR
选项似乎可以正常工作,但我想确切地知道。
RR
隔离级别是否保证 insert-if-not-exists 的MERGE
总是成功而没有约束违规错误?是否有较弱的水平可以提供相同的保证?并且是MERGE
喜欢
MERGE INTO some_table t
USING (VALUES(?)) vals(id)
ON t.id = vals.id
WHEN NOT MATCHED THEN
INSERT INTO some_table(id) VALUES(vals.id)
ELSE IGNORE
WITH RR
相当于具有相同隔离级别的条件插入?
INSERT INTO some_table(id) VALUES(?)
WHERE NOT EXISTS(
SELECT 1
FROM some_table
WHERE id = ?
WITH RR
)