|
|
1
31
当决定是否更新记录时,锁被解除或提升为独占锁。 这意味着在这种情况下:
它将是这样的:
|
|
2
8
如果锁定没有正确完成,那么肯定有可能获得这种类型的竞争条件,并且默认的锁定模式(readcommitted)允许这样做。在这种模式下,read-only在记录上放置一个共享锁,这样它们都可以看到0,递增它并将1写入数据库。 为了避免这种竞争情况,您需要在读取操作上设置一个独占锁“Serializable”和“Repeatable Read”并发模式可以做到这一点,对于单行操作,它们几乎是等价的。 要使其完全原子化,您必须:
您还可以使用HOLDLOCK(T-SQL)或等效的提示对read强制一个独占锁,具体取决于您的SQL方言。 为了实现一个序列,您将需要以原子方式获取值 ,因此更新本身可能不是您所需要的全部。 读取仍然必须在事务中进行(将它在变量中获得的内容存储起来),并在读取期间发出一个排他锁。 请注意,要在不创建热点的情况下执行此操作,您的数据库需要有适当的支持 autonomous (nested) transactions 在存储过程中。请注意,有时“嵌套”用于表示链接事务或保存点,因此该术语可能有点混乱。我编辑了这个来引用自治事务。
IIRC-Oracle支持自治事务,但是DB/2直到最近才支持,sqlserver不支持 Grey and Reuter 详细地讲一下它们的实施有多困难。在实践中,我猜很可能不是这样。基督教青年会。 |
|
|
Johnny T · 基于当前值的SQL合并表[重复] 9 月前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 10 月前 |
|
ojek · 如何对SQL结果进行分组和编号? 10 月前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 10 月前 |
|
|
Sax · 规范化Google表格(第一步) 10 月前 |
|
|
BarıŠUÅaklı · 如何在ON冲突更新中使用CTE中的值 10 月前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 10 月前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 10 月前 |
|
|
Nebula Tech · 在SQL Server中搜索字符串中单词的多次出现 10 月前 |