我目前正在处理交易和变得困惑。这些事务是在数据访问层创建的,而不是在数据库的存储过程中创建的(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之后立即更新记录是否可以?即线程A所做的更改将会丢失。如果这不适合你,那么你应该研究乐观的并发控制。 – Alexander
线程B更新记录并不正确。我甚至想阻止A在交易中被A选中时被选中。 – Sharkz