我使用SQL Server Express 2008 w/AdventureWorksLT2008 DB来理解Read committed和Read uncommitted之间的差异.
根据维基百科:http: //en.wikipedia.org/wiki/Isolation_%28database_systems%29
阅读提交
某些其他事务不会阻止查询检索的数据记录被修改.
假设有一个名为SalesLT.Address的表和一个列AddressLine2,其中所有行都有空值

然后我运行这个查询:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRANSACTION
update SalesLT.Address set AddressLine2 = 'new value'
BEGIN TRANSACTION
select AddressLine2 from SalesLT.Address
--Break Here
/*
COMMIT TRANSACTION
COMMIT TRANSACTION
*/
Run Code Online (Sandbox Code Playgroud)
因此,您可以看到第一个事务尚未提交,第二个事务开始查询数据.
结果如下:

那么,为什么第二个交易可以检索幻像数据,即使第一个交易仍未提交?
在事务内部读取数据时,该事务所做的任何更改都是可见的 - 仅在该事务中(尽管READ UNCOMMITTED对此进行了更改).所以上面,即使你已经启动了第二个嵌套的事务,你仍然在第一个事务的范围内,因此可以读取更改的数据并获得"更改的值".
例如,在单独的SPID上的另一个事务将阻止它是否使用READ COMMITTED并尝试读取此数据.
| 归档时间: |
|
| 查看次数: |
7559 次 |
| 最近记录: |