??????????????SQLServer ????????????????????:
????????????????????????????????????????????????к???????????????????????
????????????Lost update??
?????????????????????????????????????????????????????????????????????Ч???????????????????κε?????????????????????б?????????
?????????Dirty Reads??
??????????????????????????????????????????????????????????????????????????Σ???????????????е?????????????
???????????????Non-repeatable Reads??
?????????????????????????????Σ??????????????????????????????????
??????1?? ????T1??????????????T2??????????????????T1??ζ????????????????β???????
??????2?? ?????Phantom Reads??????????????????н??????β????????β???????????????β????δ????????????????????β???г?????????????????????β????SQL??????????????????????β?????????????????????????????????
??????????????????????????????SQL?淶?У???????4??????????????????????????????????
?????? δ??????????δ??????Read Uncommitted?????????????????????????????????????????????д??????????????????????????????д???????????????????????????????????????????“????д??”????
?????? ????????????????Read Committed?????????????????????????????????????????“??乲?????”??“????д??”???????????????????????????????????????????????δ????д?????????????????????С?
?????? ??????????Repeatable Read??????????????????????????????????????????????????????“???????”??“????д??”????????????????????д?????????????????д?????????κ?????????
?????? ???л???Serializable?????????????????????????????л???У??????????????????????У????????????С???????????“?м???”???????????????л??????????????????????2???????????????в??????????????????
??????????????????????????????????????????????????????????????????ó????????????????????????????????Read Committed???????????????????????н????????????????????2??????????????????????????Щ???????????????????????????????????????ó?????????????????????????
??????????????
????SQL Server??????????????ò????????????????????????????????????????????????????????????????????????????????????????????????б????????????????????????????????ò?????????SQL Server???迪???????????????????????????????????????????????????????????????????£?
????·???????????????????
????·?????????????
????·?????????????ú??????????
????·???????????????????????????????????????????????????????£?SQL Server?????
????·??????????????????
????·?????????????
????·????????????汾
????ANSI 99??????4???????????SQL Server 2005???????????Щ????
????·δ???? ???????????????????κ?????????????????????п???????????????????
????·?????? ??????????????????????????????????????????????????????????????????????????SQL Server??????????
????·??????? ??????????????????????????????????????????????
????·?????л? ???????????????????????????????????????????????????????????Χ???????????????????????漰???Χ??????????????????????
????????SQL Server????????????а汾????????????????????(???o?????????????Щ??????)???а汾??????????????????????????????????????????汾?????????????????????ж????????????????????????????????????????£?
????·?????????? ??????????????????????????????????????SQL Server??????????汾????????????ж?????????????????????????????????????????
????·???? ???????????а汾???????????????????????ζ????????????У??????????????????а汾???????????????????????????????????л??????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????
???????????£????????????????????????????????????????????????????????????????????????????????????????????????????????????
??????????
??????SQL Server 2005?У?????????????????????????????????????????????????????????????????????????????????????????????????塣??????????????????????????????????????????????????????????????????????????????а汾????????????????????汾??
?????????????????
????BEGIN TRAN
????SELECT
????FirstName?? LastName?? EmailAddress
????FROM
????Person.Contact
????WHERE
????ContactID = 1
????????EmailAddress?gustavo0@adventure-works.com???????Gustavo Achong??
??????????????????????????????????EmailAddress????????????????????????????UPDATE EmailAddress????????????
????USE AdventureWorks;
????BEGIN TRAN
????UPDATE
????Person.Contact
????SET
????EmailAddress = 'uncommitted@email.at'
????WHERE
????ContactID = 1
???????UPDATE ???????????С?????????????????????????????????????????????????1?е????????????????????????????????????????????SELECT????????????????????????????????????SQL Server?????????????????????????????????????"?????μ???????????"????
?????????л??????????1????????ζ??????
????SELECT
????FirstName?? LastName?? EmailAddress
????FROM
????Person.Contact
????WHERE
????ContactID = 1
????????SELECT??????????????????????н?????SQL Server??????ContactID= 1??????????????????????????????????2?е?UPDATE?????????????????????????????????????ɡ???????????2??????????????(????????и?????????)?????????????????????????????????????????????????????????????????????????
?????л??????????2???ò??????1?е??????????С????????????SELECT???????????е??????????????
???????????????WAIT???????????????????1?????е??????????????????2?е??????????????????????????????????
????????????2????????ROLLBACK TRAN????????UPDATE???????л?????????1??????????????????1?е????????????????????????????????????2?е??????????????????????????????????1?е????????????????????????2?е??????????????????1?е????????????????????????????2?е?????????????????1?л????μ?????????????
????????????1????????COMMIT TRAN?????????е????????
???????????????(???)????????????SQL Server????????????????????ж???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Щ????£????????????????????????????????????????Щ????£???ú?????????汾????????????Щ????£?????????????????????????????????
?????????????1?????????????????????????????
????SELECT
????FirstName?? LastName?? EmailAddress
????FROM
????Person.Contact WITH (NOLOCK)
????WHERE
????ContactID = 1
??????????????е????????????????????????????????
???????NOLOCK????? SQL Server ?У?NOLOCK ?????????"δ????"??????? SQL Server Mobile ?У???? NOLOCK ????????"????"??????SQL Server Mobile ?????????????????????????????????????ù??????????????????
????????????????????
?????????????????????
????USE master;
????ALTER DATABASE AdventureWorks
????SET READ_COMMITTED_SNAPSHOT ON
??????????? READ_COMMITTED_SNAPSHOT ????????????н??????????? ALTER DATABASE ???????????? ALTER DATABASE ?????????????в??????????????????????????????????????
???????????????′???????????????????????EmailAddress(??????????????)??
????USE AdventureWorks;
????BEGIN TRAN
????UPDATE Person.Contact
????SET EmailAddress = 'uncommitted@email.at'
????WHERE ContactID = 1;
??????????????????????????????????ContactID 1????Name??EmailAddress?С?
????USE AdventureWorks;
????BEGIN TRAN
????SELECT FirstName?? LastName?? EmailAddress
????FROM Person.Contact
????WHERE ContactID = 1;
???????????????Gustavo Achong??EmailAddress gustavo0@adventure-works.com??????????к?????汾????????п?????????????????????????????????????????????2???л??????????1??
????????????????????????л?????????????(???????????????????????2)??
????ROLLBACK TRAN
????GO
????USE master;
????ALTER DATABASE AdventureWorks
????SET READ_COMMITTED_SNAPSHOT OFF
?????????? ??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????Щ???????????????汾???????????????汾?????????????????????????????????????
?????????μ???????????
??????????????????????????????????????????????????????????????????????????????????????????£??????????????????????????????????????????У?????????????????????
????1. ???????????????????ù??????????????????????????????????????????????????????????????????
????2. ?????????????????????????汾??????????ζ??????????????????汾????????????????????????????????????????°汾??
????????????????????(??????????)?????????????????????????????£??????????????????????Щ?????????????????????н??????????????????????????????????????????з?????仯????????Щ??????????????????????????????????????????????????а汾????????????????汾?????????????????????????????????????????????????汾??????SQL Server????????????????й????л????????????