Read Committed是读已经提交的事务之后的数据,如果一个事务没有提交,则当前事务将被阻塞。例如
Connection 1:
BEGIN TRAN;
UPDATE Production.Products
SET unitprice = 20
WHERE productid = 2;
SELECT productid, unitprice
FROM Production.Products
WHERE productid = 2;
Connection 2:
SELECT productid, unitprice
FROM Production.Products
WHERE productid = 2;
Connection 2的操作将被阻塞。
如果Connection 2采用 Read committed snapshot将不会被阻塞,而是通过row versioning获得旧的数据。
还用此例接着阐述Read Committed snapshot与Sanpshot的区别。
1.提交Connnection 1的操作。
2.再次运行Connection 2的操作,由于Read committed snapshot是获取此语句运行时最后一个提交的row version, 所以将获得更新之后的结果。
3.如果Connection 3的isolation level是Sanpshot, 由于它是获取事务运行时最后一个提交的row version,所以仍将获得旧的数据。