1

我想更多地了解 sql_server 的内部行为。

我的问题是我正在尝试创建一个多用户数据库,但我正在尝试并发数据问题。

举个例子:

  1. UserA 打开一个应用程序并在不提交的情况下修改 tableA 中的某些内容。
  2. UserB 也打开应用程序并尝试读取 tableA。
  3. 用户 B 被阻止,直到用户 A 提交

我的问题是:

  1. 我该如何解决?
  2. 难道没有办法给用户B旧信息,让他知道信息是旧的吗?
4

2 回答 2

0

打开应用程序并修改 tableA 中的某些内容而不提交

不要编写执行此操作的应用程序。任何应用程序都不应在用户操作期间保持锁定。编辑表单不应锁定数据。阅读有关乐观并发的信息。

应用程序仍会偶尔阻塞,最好的方法是部署基于行的版本控制,也就是。快照隔离。请参阅了解基于行版本控制的隔离级别

于 2012-07-25T11:09:12.313 回答
0

用户 B 被阻止,直到用户 A 提交

任何现代 DBMS 都不是这样。几乎所有这些都实现了某种MVCC,以便编写器阻塞读取器,而读取器不会阻塞写入器。

如果我没记错的话,这仍然是 Microsoft SQL Server 的默认行为(即使在 2012 年),但可以更改以允许更高的并发性

于 2012-07-25T11:12:41.767 回答