Sql DB2LUW合并语句并发性
我想知道如何在DB2中高效地执行insert if not exists操作,而不会导致唯一的约束冲突 我尝试在DB2LUW中使用Sql DB2LUW合并语句并发性,sql,merge,db2,db2-luw,Sql,Merge,Db2,Db2 Luw,我想知道如何在DB2中高效地执行insert if not exists操作,而不会导致唯一的约束冲突 我尝试在DB2LUW中使用MERGE语句,但我担心重复插入的并发性。我在文章中读到,更改隔离级别可能有助于解决这些错误。根据不同的堆栈溢出,WITH RR选项似乎可以工作,但我想确定一下 RR隔离级别是否能保证insert if not exists的MERGE始终成功,而不会出现约束冲突错误?是否存在提供相同保证的较弱水平?并且是一个合并类似 MERGE INTO some_table t
MERGE
语句,但我担心重复插入的并发性。我在文章中读到,更改隔离级别可能有助于解决这些错误。根据不同的堆栈溢出,WITH RR
选项似乎可以工作,但我想确定一下
RR
隔离级别是否能保证insert if not exists的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
)
评论。我总是在不存在的地方使用insert,因为它适用于DB2以外的数据库。@danny117 MERGE是添加到SQL2003标准中的,如果您使用的是不支持它的数据库……也许是升级的时候了?