SQL差异乐观阅读和乐观写作

1 sql-server concurrency isolation-level

乐观读和乐观写有什么区别?

或者可能更重要的是,有人可以定义这 4 个吗?

(a) 乐观阅读

(b) 悲观解读

(c) 乐观写作

(d) 悲观写作

参考这里的问答:https : //stackoverflow.com/questions/2741016/read-committed-snapshot-vs-snapshot-isolation-level

'READ COMMITTED SNAPSHOT 执行乐观读取和悲观写入。相比之下,SNAPSHOT 执行乐观读取和乐观写入。

Dav*_*oft 5

或者可能更重要的是,有人可以定义这 4 个吗?

不,这些不是具有精确定义的术语。“乐观并发”意味着进行一些更改,即使您以后可能无法保存或提交更改。而“悲观并发”意味着在进行更改之前获取锁以确保您能够保存/提交它。

在 SQL Server 中,读取数据时没有隔离级别使用排他锁定(尽管您可以使用锁定提示强制它)。

RCSI 和 SNAPSHOT 都使用悲观并发。在实际进行更改之前,您将始终获得更改和提交行所需的 X 锁。

客户端库通常使用乐观并发,读取数据,在内存中更改它,然后在保存时检查这些更改是否会与另一个会话更改冲突。如果发现更改冲突,则会引发错误。参见例如乐观并发

在 SQL Server 数据库引擎中,唯一的乐观并发是内存优化表引入的模型,它不需要锁来写入数据,而是使用先写者获胜的乐观并发模型,描述here