互联网上有很多关于这个常见“问题”的信息。
解决方案如下:
IF NOT EXISTS() BEGIN INSERT INTO (...) END
在我看来,不是线程安全的,你可能会同意。
然而,您能否确认将exist放入单个select的where子句中是否足以解决SQL引擎中最高并发性的问题?这样就足够了吗?
insert into Table (columns)
select column1, column2, column3
where not exists (select top 1 1 from Table where something)
是否需要添加更高级别的事务处理或者可以在默认级别下执行提交操作?
这个操作在未提交级别下可行吗?
谢谢!
//后来添加
我可以假设两个sql语句都是正确的吗:
1) set transaction isolation level repeatable read
IF NOT EXISTS() BEGIN INSERT INTO (...) END
2) 设置事务隔离级别为可重复读
insert into Table (columns)
select column1, column2, column3
where not exists (select top 1 1 from Table where something)
EXISTS (SELECT * FROM...
,它会自动处理正确的事情。 - Damien_The_Unbeliever