我对select for update
查询是否将锁定不存在的行感兴趣。
例如
表FooBar具有两列foo和bar,foo具有唯一索引
select bar from FooBar where foo = ? for update
insert into FooBar (foo, bar) values (?, ?)
现在,插入是否有可能导致索引冲突,或者
select for update
是否可以防止这种情况?对SQLServer(2005/8),Oracle和MySQL上的行为感兴趣。
最佳答案
在Oracle中,SELECT ... FOR UPDATE对不存在的行不起作用(该语句仅引发“未找到数据”异常)。 INSERT语句将防止唯一键/主键值的重复。任何其他尝试插入相同键值的事务都将阻塞,直到第一个事务提交(此时阻塞的事务将获得重复的密钥错误)或回滚(此时阻塞的事务继续)。
关于sql - 当该行不存在时, “select for update”是否阻止其他连接插入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3601895/