数据库中的用户块

时间:2012-07-25 11:04:04

标签: sql concurrency block

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

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

举个例子:

  1. UserA打开一个应用程序并修改tableA中的内容而不提交。
  2. UserB也会打开应用程序并尝试读取表格。
  3. UserB被阻止,直到userA提交
  4. 我的问题是:

    1. 我该如何解决?
    2. 是否有办法向用户提供旧信息,让他知道信息是旧的?

2 个答案:

答案 0 :(得分:0)

  

打开一个aplication,修改tableA中没有的内容   comitting

不要编写执行此操作的应用程序。在用户操作期间,任何应用程序都不应持有锁。编辑表单不应该锁定数据。阅读Optimistic Concurency

应用程序仍会偶尔阻止,最好的方法是部署基于行的版本控制,也就是说。快照隔离。见Understanding Row Versioning-Based Isolation Levels

答案 1 :(得分:0)

  

UserB被阻止,直到userA提交

任何现代DBMS都不是这样。几乎所有这些都实现了某种MVCC,以便作者阻止读者,读者不会阻止作者。

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