【发布时间】:2012-09-27 07:47:01
【问题描述】:
我目前正在处理交易并感到困惑。这些事务是在数据访问层而不是在数据库的存储过程中创建的 (SQL Server 2008)。 我了解为交易设置的隔离级别的正常工作。 我无法理解在以下情况下会发生什么。
- 发起交易
- 选择 ID=1 的员工。
- 更新 ID=1 的员工。
- 提交
有多个线程在做同样的事情,但 ID 不同。但可能存在两个线程查找相同 ID 的情况。让我们称它们为线程 A 和 B。对于这两个线程,上述步骤按以下方式进行。隔离级别设置为可重复读取。
A1。发起交易 A2。选择 ID=1 的员工。 B1。发起交易 B2。选择 ID=1 的员工。 A3。更新 ID=1 的员工。 A4。犯罪 B3。更新 ID=1 的员工。 B4。提交
我真正想从事务中实现的是,当线程 A 选择特定记录时,线程 B 甚至应该无法选择该记录。我不知道我是否正在考虑在这种情况下使用事务和锁是否走在正确的轨道上。
等待回复:)
【问题讨论】:
-
一般来说,线程B在线程A之后立即更新记录对您来说可以吗? IE。线程 A 所做的更改将丢失。如果这不适合您,那么您应该研究乐观并发控制。
-
线程B不能更新记录。我什至想防止在事务中已被 A 选择的记录被选择。
标签: c# sql-server-2008 transactions locks