我想更多地了解 sql_server 的内部行为。
我的问题是我正在尝试创建一个多用户数据库,但我正在尝试并发数据问题。
举个例子:
- UserA 打开一个应用程序并在不提交的情况下修改 tableA 中的某些内容。
- UserB 也打开应用程序并尝试读取 tableA。
- 用户 B 被阻止,直到用户 A 提交
我的问题是:
- 我该如何解决?
- 难道没有办法给用户B旧信息,让他知道信息是旧的吗?
我想更多地了解 sql_server 的内部行为。
我的问题是我正在尝试创建一个多用户数据库,但我正在尝试并发数据问题。
举个例子:
我的问题是:
打开应用程序并修改 tableA 中的某些内容而不提交
不要编写执行此操作的应用程序。任何应用程序都不应在用户操作期间保持锁定。编辑表单不应锁定数据。阅读有关乐观并发的信息。
应用程序仍会偶尔阻塞,最好的方法是部署基于行的版本控制,也就是。快照隔离。请参阅了解基于行版本控制的隔离级别。
用户 B 被阻止,直到用户 A 提交
任何现代 DBMS 都不是这样。几乎所有这些都实现了某种MVCC,以便编写器阻塞读取器,而读取器不会阻塞写入器。
如果我没记错的话,这仍然是 Microsoft SQL Server 的默认行为(即使在 2012 年),但可以更改以允许更高的并发性