Á˽âÊÂÎñºÍËø
ÊÂÎñ£º±£³ÖÂß¼Êý¾ÝÒ»ÖÂÐÔÓë¿É»Ö¸´ÐÔ£¬±Ø²»¿ÉÉÙµÄÀûÆ÷¡£
Ëø£º¶àÓû§·ÃÎÊͬһÊý¾Ý¿â×ÊԴʱ£¬¶Ô·ÃÎʵÄÏȺó´ÎÐòȨÏÞ¹ÜÀíµÄÒ»ÖÖ»úÖÆ£¬Ã»ÓÐËûÊÂÎñ»òÐí½«»áÒ»ËúºýÍ¿£¬²»Äܱ£Ö¤Êý¾ÝµÄ°²È«ÕýÈ·¶Áд¡£
ËÀËø£ºÊÇÊý¾Ý¿âÐÔÄܵÄÖØÁ¿¼¶É±ÊÖÖ®Ò»£¬¶øËÀËøÈ´ÊDz»Í¬ÊÂÎñÖ®¼äÇÀÕ¼Êý¾Ý×ÊÔ´Ôì³ÉµÄ¡£
²»¶®µÄÌýÉÏÈ¥£¬Í¦ÉñÆæµÄ£¬¶®µÄ¸Ð¾õÎÒÔÚ³¶µ£¬ÏÂÃæ´øÄãºÃºÃÁìÂÔÏÂËûÃǵķç²É£¬Ðá–ËÏÂËûÃǵĿñɧ¡£¡£
ÏÈ˵ÊÂÎñ--¸ÅÄ·ÖÀà
Óûª×ÐÎÞ¼äµÀÖеÄÒ»¾äÀ´¸øÄãÚ¹ÊÍÏ£ºÈ¥²»ÁËÖյ㣬»Øµ½Ôµã¡£
¾ÙÀý˵Ã÷£º
ÔÚÒ»¸öÊÂÎñÖУ¬ÄãдÀ²2ÌõsqlÓï¾ä£¬Ò»ÌõÊÇÐ޸Ķ©µ¥±í״̬,Ò»ÌõÊÇÐÞ¸Ä¿â´æ±í¿â´æ-1
¡£ Èç¹ûÔÚÐ޸Ķ©µ¥±í״̬µÄʱºò³ö´í£¬ÊÂÎñÄܹ»»Ø¹ö£¬Êý¾Ý½«»Ö¸´µ½Ã»ÐÞ¸Ä֮ǰµÄÊý¾Ý״̬£¬ÏÂÃæµÄÐÞ¸Ä¿â´æÒ²¾Í²»Ö´ÐУ¬ÕâÑùÈ·±£Äã¹ØÏµÂß¼µÄÒ»Ö£¬°²È«¡£¡£
ÊÂÎñ¾ÍÊÇÕâ¸öÑù×Ó£¬¾óÆ¢Æø£¬ÒªÃ´È«²¿Ö´ÐУ¬ÒªÃ´È«²¿²»Ö´ÐУ¬»Øµ½ÔÊý¾Ý״̬¡£
ÊéÃæ½âÊÍ£ºÊÂÎñ¾ßÓÐÔ×ÓÐÔ£¬Ò»ÖÂÐÔ£¬¸ôÀëÐÔ£¬³Ö¾ÃÐÔ¡£
Ô×ÓÐÔ£ºÊÂÎñ±ØÐëÊÇÒ»¸ö×Ô¶¯¹¤×÷µÄµ¥Ôª£¬ÒªÃ´È«²¿Ö´ÐУ¬ÒªÃ´È«²¿²»Ö´ÐС£
Ò»ÖÂÐÔ£ºÊÂÎñ½áÊøµÄʱºò£¬ËùÓеÄÄÚ²¿Êý¾Ý¶¼ÊÇÕýÈ·µÄ¡£
¸ôÀëÐÔ£º²¢·¢¶à¸öÊÂÎñʱ£¬¸÷¸öÊÂÎñ²»¸ÉÉæÄÚ²¿Êý¾Ý£¬´¦ÀíµÄ¶¼ÊÇÁíÍâÒ»¸öÊÂÎñ´¦Àí֮ǰ»òÖ®ºóµÄÊý¾Ý¡£
³Ö¾ÃÐÔ£ºÊÂÎñÌá½»Ö®ºó£¬Êý¾ÝÊÇÓÀ¾ÃÐԵ쬲»¿ÉÔٻعö¡£
È»¶øÔÚSQL ServerÖÐÊÂÎñ±»·ÖΪ3Àà³£¼ûµÄÊÂÎñ£º
×Ô¶¯Ìá½»ÊÂÎñ£ºÊÇSQL ServerĬÈϵÄÒ»ÖÖÊÂÎñģʽ£¬Ã¿ÌõSqlÓï¾ä¶¼±»¿´³ÉÒ»¸öÊÂÎñ½øÐд¦Àí£¬ÄãÓ¦¸ÃûÓмû¹ý£¬Ò»ÌõUpdate
ÐÞ¸Ä2¸ö×ֶεÄÓï¾ä£¬Ö»ÐÞ¸ÃÁË1¸ö×ֶζøÁíÍâÒ»¸ö×Ö¶ÎûÓÐÐ޸ġ£¡£
ÏÔʽÊÂÎñ£ºT-sql±êÃ÷£¬ÓÉBegin Transaction¿ªÆôÊÂÎñ¿ªÊ¼£¬ÓÉCommit
Transaction Ìá½»ÊÂÎñ¡¢Rollback Transaction »Ø¹öÊÂÎñ½áÊø¡£
ÒþʽÊÂÎñ£ºÊ¹ÓÃSet IMPLICIT_TRANSACTIONS ON
½«½«ÒþʽÊÂÎñģʽ´ò¿ª£¬²»ÓÃBegin Transaction¿ªÆôÊÂÎñ£¬µ±Ò»¸öÊÂÎñ½áÊø£¬Õâ¸öģʽ»á×Ô¶¯ÆôÓÃÏÂÒ»¸öÊÂÎñ£¬Ö»ÓÃCommit
Transaction Ìá½»ÊÂÎñ¡¢Rollback Transaction »Ø¹öÊÂÎñ¼´¿É¡£
ÏÔʽÊÂÎñµÄÓ¦ÓÃ
³£ÓÃÓï¾ä¾ÍËĸö¡£
Begin Transaction£º±ê¼ÇÊÂÎñ¿ªÊ¼¡£
Commit Transaction£ºÊÂÎñÒѾ³É¹¦Ö´ÐУ¬Êý¾ÝÒѾ´¦ÀíÍ×µ±¡£
Rollback Transaction£ºÊý¾Ý´¦Àí¹ý³ÌÖгö´í£¬»Ø¹öµ½Ã»Óд¦Àí֮ǰµÄÊý¾Ý״̬£¬»ò»Ø¹öµ½ÊÂÎñÄÚ²¿µÄ±£´æµã¡£
Save Transaction£ºÊÂÎñÄÚ²¿ÉèÖõı£´æµã£¬¾ÍÊÇÊÂÎñ¿ÉÒÔ²»È«²¿»Ø¹ö£¬Ö»»Ø¹öµ½ÕâÀ±£Ö¤ÊÂÎñÄÚ²¿²»³ö´íµÄǰÌáÏ¡£
ÉÏÃæµÄ¶¼ÊÇÐÄ·¨£¬ÏÂÃæµÄ¸øÄãÀ´¸öÕÐʽ£¬Òª¿´×ÐϸÀ²¡£
1 ---¿ªÆôÊÂÎñ 2 begin tran 3 --´íÎóÆË×½»úÖÆ£¬¿´ºÃÀ²£¬ÕâÀïÒ²Óеġ£²¢ÇÒ¿ÉÒÔǶÌס£ 4 begin try 5 --Óï¾äÕýÈ· 6 insert into lives (Eat,Play,Numb) values ('ÖíÈâ','×ãÇò',1) 7 --NumbΪintÀàÐÍ£¬³ö´í 8 insert into lives (Eat,Play,Numb) values ('ÖíÈâ','×ãÇò','abc') 9 --Óï¾äÕýÈ· 10 insert into lives (Eat,Play,Numb) values ('¹·Èâ','ÀºÇò',2) 11 end try 12 begin catch 13 select Error_number() as ErrorNumber, --´íÎó´úÂë 14 Error_severity() as ErrorSeverity, --´íÎóÑÏÖØ¼¶±ð£¬¼¶±ðСÓÚ10 try catch ²¶»ñ²»µ½ 15 Error_state() as ErrorState , --´íÎó״̬Âë 16 Error_Procedure() as ErrorProcedure , --³öÏÖ´íÎóµÄ´æ´¢¹ý³Ì»ò´¥·¢Æ÷µÄÃû³Æ¡£ 17 Error_line() as ErrorLine, --·¢Éú´íÎóµÄÐкŠ18 Error_message() as ErrorMessage --´íÎóµÄ¾ßÌåÐÅÏ¢ 19 if(@@trancount>0) --È«¾Ö±äÁ¿@@trancount£¬ÊÂÎñ¿ªÆô´ËÖµ+1£¬ËûÓÃÀ´ÅжÏÊÇÓпªÆôÊÂÎñ 20 rollback tran ---ÓÉÓÚ³ö´í£¬ÕâÀï»Ø¹öµ½¿ªÊ¼£¬µÚÒ»ÌõÓï¾äҲûÓвåÈë³É¹¦¡£ 21 end catch 22 if(@@trancount>0) 23 commit tran --Èç¹û³É¹¦Lives±íÖУ¬½«»áÓÐ3ÌõÊý¾Ý¡£ 24 25 --±í±¾ÉíΪ¿Õ±í£¬ID ,NumbΪint ÀàÐÍ£¬ÆäËüΪnvarcharÀàÐÍ 26 select * from lives |

---¿ªÆôÊÂÎñ begin tran --´íÎóÆË×½»úÖÆ£¬¿´ºÃÀ²£¬ÕâÀïÒ²Óеġ£²¢ÇÒ¿ÉÒÔǶÌס£ begin try --Óï¾äÕýÈ· insert into lives (Eat,Play,Numb) values ('ÖíÈâ','×ãÇò',1) --¼ÓÈë±£´æµã save tran pigOneIn --NumbΪintÀàÐÍ£¬³ö´í insert into lives (Eat,Play,Numb) values ('ÖíÈâ','×ãÇò',2) --Óï¾äÕýÈ· insert into lives (Eat,Play,Numb) values ('¹·Èâ','ÀºÇò',3) end try begin catch select Error_number() as ErrorNumber, --´íÎó´úÂë Error_severity() as ErrorSeverity, --´íÎóÑÏÖØ¼¶±ð£¬¼¶±ðСÓÚ10 try catch ²¶»ñ²»µ½ Error_state() as ErrorState , --´íÎó״̬Âë Error_Procedure() as ErrorProcedure , --³öÏÖ´íÎóµÄ´æ´¢¹ý³Ì»ò´¥·¢Æ÷µÄÃû³Æ¡£ Error_line() as ErrorLine, --·¢Éú´íÎóµÄÐкŠError_message() as ErrorMessage --´íÎóµÄ¾ßÌåÐÅÏ¢ if(@@trancount>0) --È«¾Ö±äÁ¿@@trancount£¬ÊÂÎñ¿ªÆô´ËÖµ+1£¬ËûÓÃÀ´ÅжÏÊÇÓпªÆôÊÂÎñ rollback tran ---ÓÉÓÚ³ö´í£¬ÕâÀï»Ø¹öÊÂÎñµ½Ôµã£¬µÚÒ»ÌõÓï¾äҲûÓвåÈë³É¹¦¡£ end catch if(@@trancount>0) rollback tran pigOneIn --Èç¹û³É¹¦Lives±íÖУ¬½«»áÓÐ3ÌõÊý¾Ý¡£ --±í±¾ÉíΪ¿Õ±í£¬ID ,NumbΪint ÀàÐÍ£¬ÆäËüΪnvarcharÀàÐÍ select * from lives |

ʹÓÃset xact_abort
ÉèÖà xact_abort on/off , Ö¸¶¨ÊÇ·ñ»Ø¹öµ±Ç°ÊÂÎñ£¬ÎªonʱÈç¹ûµ±Ç°sql³ö´í£¬»Ø¹öÕû¸öÊÂÎñ£¬ÎªoffʱÈç¹ûsql³ö´í»Ø¹öµ±Ç°sqlÓï¾ä£¬ÆäËüÓï¾äÕÕ³£ÔËÐжÁдÊý¾Ý¿â¡£
ÐèҪעÒâµÄʱ£ºxact_abortÖ»¶ÔÔËÐÐʱ³öÏֵĴíÎóÓÐÓã¬Èç¹ûsqlÓï¾ä´æÔÚ±àÒëʱ´íÎó£¬ÄÇôËû¾ÍʧÁéÀ²¡£
delete lives --Çå¿ÕÊý¾Ý set xact_abort off begin tran --Óï¾äÕýÈ· insert into lives (Eat,Play,Numb) values ('ÖíÈâ','×ãÇò',1) --NumbΪintÀàÐÍ£¬³ö´í,Èç¹û1234..ÄǸö´óÊý¾Ý»»³É'132dsaf' xact_abort½«Ê§Ð§ insert into lives (Eat,Play,Numb) values ('ÖíÈâ','×ãÇò',12345646879783213) --Óï¾äÕýÈ· insert into lives (Eat,Play,Numb) values ('¹·Èâ','ÀºÇò',3) commit tran select * from lives Ϊonʱ£¬½á¹û¼¯Îª¿Õ£¬ÒòΪÔËÐÐÊÇÊý¾Ý¹ý´óÒç³ö³ö´í£¬»Ø¹öÕû¸öÊÂÎñ¡£ ÊÂÎñ°ÑËÀËø¸øÕû³öÀ´À² ¸ú×Å×ö£º´ò¿ªÁ½¸ö²éѯ´°¿Ú£¬°ÑÏÂÃæµÄÓï¾ä£¬·Ö±ð·ÅÈë2¸ö²éѯ´°¿Ú£¬ÔÚ5ÃëÄÚÔËÐÐ2¸öÊÂÎñÄ£¿é¡£ begin tran update lives set play='ÓðëÇò' waitfor delay '0:0:5' update dbo.Earth set Animal='ÀÏ»¢' commit tran begin tran update Earth set Animal='ÀÏ»¢' waitfor delay '0:0:5' --µÈ´ý5ÃëÖ´ÐÐÏÂÃæµÄÓï¾ä update lives set play='ÓðëÇò' commit tran select * from lives select * from Earth |

ÎªÊ²Ã´ÄØ£¬ÏÂÃæÎÒÃÇ¿´¿´Ëø£¬Ê²Ã´ÊÇËø¡£
²¢·¢ÊÂÎñ³É°Ü½Ô¹éÓÚËø¡ª¡ªËø¶¨
ÔÚ¶àÓû§¶¼ÓÃÊÂÎñͬʱ·ÃÎÊͬһ¸öÊý¾Ý×ÊÔ´µÄÇé¿öÏ£¬¾Í»áÔì³ÉÒÔϼ¸ÖÖÊý¾Ý´íÎó¡£
¸üжªÊ§£º¶à¸öÓû§Í¬Ê±¶ÔÒ»¸öÊý¾Ý×ÊÔ´½øÐиüУ¬±Ø¶¨»á²úÉú±»¸²¸ÇµÄÊý¾Ý£¬Ôì³ÉÊý¾Ý¶ÁдÒì³£¡£
²»¿ÉÖØ¸´¶Á£ºÈç¹ûÒ»¸öÓû§ÔÚÒ»¸öÊÂÎñÖжà´Î¶ÁȡһÌõÊý¾Ý£¬¶øÁíÍâÒ»¸öÓû§Ôòͬʱ¸üÐÂÀ²ÕâÌõÊý¾Ý£¬Ôì³ÉµÚÒ»¸öÓû§¶à´Î¶ÁÈ¡Êý¾Ý²»Ò»Ö¡£
Ôà¶Á£ºµÚÒ»¸öÊÂÎñ¶ÁÈ¡µÚ¶þ¸öÊÂÎñÕýÔÚ¸üеÄÊý¾Ý±í£¬Èç¹ûµÚ¶þ¸öÊÂÎñ»¹Ã»ÓиüÐÂÍê³É£¬ÄÇôµÚÒ»¸öÊÂÎñ¶ÁÈ¡µÄÊý¾Ý½«ÊÇÒ»°ëΪ¸üйýµÄ£¬Ò»°ë»¹Ã»¸üйýµÄÊý¾Ý£¬ÕâÑùµÄÊý¾ÝºÁÎÞÒâÒå¡£
»Ã¶Á£ºµÚÒ»¸öÊÂÎñ¶Áȡһ¸ö½á¹û¼¯ºó£¬µÚ¶þ¸öÊÂÎñ£¬¶ÔÕâ¸ö½á¹û¼¯¾ÐÐÔöɾ²Ù×÷£¬È»¶øµÚÒ»¸öÊÂÎñÖÐÔٴζÔÕâ¸ö½á¹û¼¯½øÐвéѯʱ£¬Êý¾Ý·¢ÏÖ¶ªÊ§»òÐÂÔö¡£
È»¶øËø¶¨£¬¾ÍÊÇΪ½â¾öÕâЩÎÊÌâËùÉúµÄ£¬ËûµÄ´æÔÚʹµÃÒ»¸öÊÂÎñ¶ÔËû×Ô¼ºµÄÊý¾Ý¿é½øÐвÙ×÷µÄʱºò£¬¶øÁíÍâÒ»¸öÊÂÎñÔò²»Äܲå×ãÕâЩÊý¾Ý¿é¡£Õâ¾ÍÊÇËùνµÄËø¶¨¡£
Ëø¶¨´ÓÊý¾Ý¿âϵͳµÄ½Ç¶È´óÖ¿ÉÒÔ·ÖΪ6ÖÖ£º
¹²ÏíËø£¨S£©£º»¹¿ÉÒÔ½ÐËû¶ÁËø¡£¿ÉÒÔ²¢·¢¶ÁÈ¡Êý¾Ý£¬µ«²»ÄÜÐÞ¸ÄÊý¾Ý¡£Ò²¾ÍÊÇ˵µ±Êý¾Ý×ÊÔ´ÉÏ´æÔÚ¹²ÏíËøµÄʱºò£¬ËùÓеÄÊÂÎñ¶¼²»ÄܶÔÕâ¸ö×ÊÔ´½øÐÐÐ޸ģ¬Ö±µ½Êý¾Ý¶ÁÈ¡Íê³É£¬¹²ÏíËøÊÍ·Å¡£
ÅÅËüËø£¨X£©£º»¹¿ÉÒÔ½ÐËû¶ÀÕ¼Ëø¡¢Ð´Ëø¡£¾ÍÊÇÈç¹ûÄã¶ÔÊý¾Ý×ÊÔ´½øÐÐÔöɾ¸Ä²Ù×÷ʱ£¬²»ÔÊÐíÆäËüÈκÎÊÂÎñ²Ù×÷Õâ¿é×ÊÔ´£¬Ö±µ½ÅÅËüËø±»ÊÍ·Å£¬·Àֹͬʱ¶Ôͬһ×ÊÔ´½øÐжàÖØ²Ù×÷¡£
¸üÐÂËø£¨U£©£º·ÀÖ¹³öÏÖËÀËøµÄËøÄ£Ê½£¬Á½¸öÊÂÎñ¶ÔÒ»¸öÊý¾Ý×ÊÔ´½øÐÐÏȶÁÈ¡ÔÚÐ޸ĵÄÇé¿öÏ£¬Ê¹Óù²ÏíËøºÍÅÅËüËøÓÐʱ»á³öÏÖËÀËøÏÖÏ󣬶øÊ¹ÓøüÐÂËøÔò¿ÉÒÔ±ÜÃâËÀËøµÄ³öÏÖ¡£×ÊÔ´µÄ¸üÐÂËøÒ»´ÎÖ»ÄÜ·ÖÅä¸øÒ»¸öÊÂÎñ£¬Èç¹ûÐèÒª¶Ô×ÊÔ´½øÐÐÐ޸쬏üÐÂËø»á±ä³ÉÅÅËûËø£¬·ñÔò±äΪ¹²ÏíËø¡£
ÒâÏòËø£ºSQL ServerÐèÒªÔÚ²ã´Î½á¹¹Öеĵײã×ÊÔ´ÉÏ£¨ÈçÐУ¬ÁУ©»ñÈ¡¹²ÏíËø£¬ÅÅËüËø£¬¸üÐÂËø¡£ÀýÈç±í¼¶·ÅÖÃÁËÒâÏò¹²ÏíËø£¬¾Í±íʾÊÂÎñÒª¶Ô±íµÄÒ³»òÐÐÉÏʹÓù²ÏíËø¡£ÔÚ±íµÄijһÐÐÉÏÉÏ·ÅÖÃÒâÏòËø£¬¿ÉÒÔ·ÀÖ¹ÆäËüÊÂÎñ»ñÈ¡ÆäËü²»¼æÈݵĵÄËø¡£ÒâÏòËø¿ÉÒÔÌá¸ßÐÔÄÜ£¬ÒòΪÊý¾ÝÒýÇæ²»ÐèÒª¼ì²â×ÊÔ´µÄÿһÁÐÿһÐУ¬¾ÍÄÜÅжÏÊÇ·ñ¿ÉÒÔ»ñÈ¡µ½¸Ã×ÊÔ´µÄ¼æÈÝËø¡£ÒâÏòËø°üÀ¨ÈýÖÖÀàÐÍ£ºÒâÏò¹²ÏíËø£¨IS£©£¬ÒâÏòÅÅËûËø£¨IX£©£¬ÒâÏòÅÅËû¹²ÏíËø£¨SIX£©¡£
¼Ü¹¹Ëø£º·ÀÖ¹Ð޸ıí½á¹¹Ê±£¬²¢·¢·ÃÎʵÄËø¡£
´óÈÝÁ¿¸üÐÂËø£ºÔÊÐí¶à¸öÏ߳̽«´óÈÝÁ¿Êý¾Ý²¢·¢µÄ²åÈ뵽ͬһ¸ö±íÖУ¬ÔÚ¼ÓÔØµÄͬʱ£¬²»ÔÊÐíÆäËü½ø³Ì·ÃÎÊ¸Ã±í¡£
ÕâÐ©ËøÖ®¼äµÄÏ໥¼æÈÝÐÔ£¬Ò²¾ÍÊÇ£¬ÊÇ·ñ¿ÉÒÔͬʱ´æÔÚ¡£

Ëø¼æÈÝÐÔ¾ßÌå²Î¼û£ºhttp://msdn.microsoft.com/zh-cn/library/ms186396.aspx
ËøÁ£¶ÈºÍ²ã´Î½á¹¹²Î¼û£ºhttp://msdn.microsoft.com/zh-cn/library/ms189849(v=sql.105).aspx
ËÀËø
ʲôÊÇËÀËø£¬ÎªÊ²Ã´»á²úÉúËÀËø¡£ÎÒÓà ¡°ÊÂÎñ°ÑËÀËø¸øÕû³öÀ´À²¡± ±êÌâϵÄÁ½¸öÊÂÎñ²úÉúµÄËÀËøÀ´½âÊÍÓ¦¸Ã»á¸ü¼ÓÉú¶¯ÐÎÏóµã¡£
Àý×ÓÊÇÕâÑùµÄ£º
µÚÒ»¸öÊÂÎñ£¨³ÆÎªA£©£ºÏȸüÐÂlives±í --->>Í£¶Ù5Ãë---->>¸üÐÂearth±í
µÚ¶þ¸öÊÂÎñ£¨³ÆÎªB£©£ºÏȸüÐÂearth±í--->>Í£¶Ù5Ãë---->>¸üÐÂlives±í
ÏÈÖ´ÐÐÊÂÎñA----5ÃëÖ®ÄÚ---Ö´ÐÐÊÂÎñB£¬³öÏÖËÀËøÏÖÏó¡£
¹ý³ÌÊÇÕâÑù×ӵģº
A¸üÐÂlives±í£¬ÇëÇólivesµÄÅÅËûËø£¬³É¹¦¡£
B¸üÐÂearth±í£¬ÇëÇóearthµÄÅÅËûËø£¬³É¹¦¡£
5Ãë¹ýºó
A¸üÐÂearth£¬ÇëÇóearthµÄÅÅËüËø£¬ÓÉÓÚBÕ¼ÓÃ×ÅearthµÄÅÅËüËø£¬µÈ´ý¡£
B¸üÐÂlives£¬ÇëÇólivesµÄÅÅËüËø£¬ÓÉÓÚAÕ¼ÓÃ×ÅlivesµÄÅÅËüËø£¬µÈ´ý¡£
ÕâÑùÏ໥µÈ´ý¶Ô·½ÊÍ·Å×ÊÔ´£¬Ôì³É×ÊÔ´¶Áдӵ¼·¶ÂÈûµÄÇé¿ö£¬¾Í±»³ÆÎªËÀËøÏÖÏó£¬Ò²½Ð×ö×èÈû¡£¶øÎªÊ²Ã´»á²úÉú£¬ÉÏÀý¾ÍÁоٳöÀ´À²¡£
È»¶øÊý¾Ý¿â²¢Ã»ÓгöÏÖÎÞÏ޵ȴýµÄÇé¿ö£¬ÊÇÒòΪÊý¾Ý¿âËÑË÷ÒýÇæ»á¶¨ÆÚ¼ì²âÕâÖÖ×´¿ö£¬Ò»µ©·¢ÏÖÓÐÇé¿ö£¬Á¢ÂíÑ¡ÔñÒ»¸öÊÂÎñ×÷ΪÎþÉüÆ·¡£ÎþÉüµÄÊÂÎñ£¬½«»á»Ø¹öÊý¾Ý¡£ÓеãÏñÁ½¸öÈËÔÚ¹ý¶ÀľÇÅ£¬Á½¸öÎÞÄÔµÄÈ˶¼×ßÔÚÀ²¶ÀľÇÅÖм䣬Èç¹û²»ÂäË®£¬±Ø¶¨ÒªÓÐÒ»¸öÈ˸øÍË»ØÀ´¡£ÕâÖÖÏ໥µÈ´ýµÄ¹ý³Ì£¬ÊÇÒ»ÖÖºÄʱºÄ×ÊÔ´µÄÏÖÏó£¬ËùÒÔÄܱÜÔò±Ü¡£
ÄĸöÈ˻ᱻÍË»ØÀ´£¬×÷ΪÎþÉüÆ·£¬Õâ¸öÎÒÃÇÊÇ¿ÉÒÔ¿ØÖƵġ£¿ØÖÆÓï·¨£º
set deadlock_priority <¼¶±ð>
ËÀËø´¦ÀíµÄÓÅÏȼ¶±ðΪ low<normal<high£¬²»Ö¸¶¨µÄÇé¿öÏÂĬÈÏΪnormal£¬ÎþÉüÆ·ÎªËæ»ú¡£Èç¹ûÖ¸¶¨£¬ÎþÉüƷΪ¼¶±ðµÍµÄ¡£
»¹¿ÉÒÔʹÓÃÊý×ÖÀ´´¦Àí±êʶ¼¶±ð£º-10µ½-5Ϊlow£¬-5Ϊnormal£¬-5µ½10Ϊhigh¡£
¼õÉÙËÀËøµÄ·¢Éú£¬Ìá¸ßÊý¾Ý¿âÐÔÄÜ
ËÀËøºÄʱºÄ×ÊÔ´£¬È»¶øÔÚ´óÐÍÊý¾Ý¿âÖУ¬¸ß²¢·¢´øÀ´µÄËÀËøÊDz»¿É±ÜÃâµÄ£¬ËùÒÔÎÒÃÇÖ»ÄÜÈÃÆä±äµÄ¸üÉÙ¡£
°´ÕÕͬһ˳Ðò·ÃÎÊÊý¾Ý¿â×ÊÔ´£¬ÉÏÊöÀý×ӾͲ»»á·¢ÉúËÀËøÀ²
±£³ÖÊÇÊÂÎñµÄ¼ò¶Ì£¬¾¡Á¿²»ÒªÈÃÒ»¸öÊÂÎñ´¦Àí¹ýÓÚ¸´ÔӵĶÁд²Ù×÷¡£ÊÂÎñ¹ýÓÚ¸´ÔÓ£¬Õ¼ÓÃ×ÊÔ´»áÔö¶à£¬´¦Àíʱ¼äÔö³¤£¬ÈÝÒ×ÓëÆäËüÊÂÎñ³åÍ»£¬ÌáÉýËÀËø¸ÅÂÊ¡£
¾¡Á¿²»ÒªÔÚÊÂÎñÖÐÒªÇóÓû§ÏìÓ¦£¬±ÈÈçÐÞ¸ÄÐÂÔöÊý¾ÝÖ®ºóÔÚÍê³ÉÕû¸öÊÂÎñµÄÌá½»£¬ÕâÑùÑÓ³¤ÊÂÎñÕ¼ÓÃ×ÊÔ´µÄʱ¼ä£¬Ò²»áÌáÉýËÀËø¸ÅÂÊ¡£
¾¡Á¿¼õÉÙÊý¾Ý¿âµÄ²¢·¢Á¿¡£
¾¡¿ÉÄÜʹÓ÷ÖÇø±í£¬·ÖÇøÊÓͼ£¬°ÑÊý¾Ý·ÅÖÃÔÚ²»Í¬µÄ´ÅÅ̺ÍÎļþ×éÖУ¬·ÖÉ¢·ÃÎʱ£´æÔÚ²»Í¬·ÖÇøµÄÊý¾Ý£¬¼õÉÙÒòΪ±íÖзÅÖÃËø¶øÔì³ÉµÄÆäËüÊÂÎñ³¤Ê±¼äµÈ´ý¡£
±ÜÃâÕ¼ÓÃʱ¼äºÜ³¤²¢ÇÒ¹ØÏµ±í¸´ÔÓµÄÊý¾Ý²Ù×÷¡£
ʹÓýϵ͵ĸôÀë¼¶±ð£¬Ê¹Óýϵ͵ĸôÀë¼¶±ð±ÈʹÓýϸߵĸôÀë¼¶±ð³ÖÓй²ÏíËøµÄʱ¼ä¸ü¶Ì¡£ÕâÑù¾Í¼õÉÙÁËËøÕùÓá£
¿É²Î¿¼£ºhttp://msdn.microsoft.com/zh-cn/library/ms191242(v=sql.105).aspx
²é¿´Ëø»î¶¯Çé¿ö£º
--²é¿´Ëø»î¶¯Çé¿ö
select * from sys.dm_tran_locks
--²é¿´ÊÂÎñ»î¶¯Çé¿ö
dbcc opentran
¿É²Î¿¼£ºhttp://msdn.microsoft.com/zh-cn/library/ms190345.aspx
ΪÊÂÎñÉèÖøôÀë¼¶±ð
ËùνÊÂÎï¸ôÀë¼¶±ð£¬¾ÍÊDz¢·¢ÊÂÎñ¶Ôͬһ×ÊÔ´µÄ¶ÁÈ¡Éî¶È²ã´Î¡£·ÖΪ5ÖÖ¡£
read uncommitted£ºÕâ¸ö¸ôÀë¼¶±ð×îµÍÀ²£¬¿ÉÒÔ¶ÁÈ¡µ½Ò»¸öÊÂÎñÕýÔÚ´¦ÀíµÄÊý¾Ý£¬µ«ÊÂÎñ»¹Î´Ìá½»£¬ÕâÖÖ¼¶±ðµÄ¶ÁÈ¡½Ð×öÔà¶Á¡£
read committed£ºÕâ¸ö¼¶±ðÊÇĬÈÏÑ¡Ï²»ÄÜÔà¶Á£¬²»ÄܶÁÈ¡ÊÂÎñÕýÔÚ´¦ÀíûÓÐÌá½»µÄÊý¾Ý£¬µ«ÄÜÐ޸ġ£
repeatable read£º²»ÄܶÁÈ¡ÊÂÎñÕýÔÚ´¦ÀíµÄÊý¾Ý£¬Ò²²»ÄÜÐÞ¸ÄÊÂÎñ´¦ÀíÊý¾ÝǰµÄÊý¾Ý¡£
snapshot£ºÖ¸¶¨ÊÂÎñÔÚ¿ªÊ¼µÄʱºò£¬¾Í»ñµÃÁËÒѾÌá½»Êý¾ÝµÄ¿ìÕÕ£¬Òò´Ëµ±Ç°ÊÂÎñÖ»ÄÜ¿´µ½ÊÂÎñ¿ªÊ¼Ö®Ç°¶ÔÊý¾ÝËù×öµÄÐ޸ġ£
serializable£º×î¸ßÊÂÎñ¸ôÀë¼¶±ð£¬Ö»ÄÜ¿´µ½ÊÂÎñ´¦Àí֮ǰµÄÊý¾Ý¡£
--Óï·¨
set tran isolation level <¼¶±ð>
read uncommitted¸ôÀë¼¶±ðµÄÀý×Ó£º
begin tran set deadlock_priority low update Earth set Animal='ÀÏ»¢' waitfor delay '0:0:5' --µÈ´ý5ÃëÖ´ÐÐÏÂÃæµÄÓï¾ä rollback tran |
¿ªÁíÍâÒ»¸ö²éѯ´°¿ÚÖ´ÐÐÏÂÃæÓï¾ä
set tran isolation level read uncommitted select * from Earth --¶ÁÈ¡µÄÊý¾ÝΪÕýÔÚÐ޸ĵÄÊý¾Ý £¬Ôà¶Á waitfor delay '0:0:5' --5ÃëÖ®ºóÊý¾ÝÒѾ»Ø¹ö select * from Earth --»Ø¹öÖ®ºóµÄÊý¾Ý |

read committed¸ôÀë¼¶±ðµÄÀý×Ó£º
begin tran ¡¡¡¡update Earth set Animal='ÀÏ»¢' ¡¡¡¡waitfor delay '0:0:10' --µÈ´ý5ÃëÖ´ÐÐÏÂÃæµÄÓï¾ä ¡¡¡¡rollback tran ¡¡¡¡set tran isolation level read committed ¡¡¡¡select * from Earth ---»ñÈ¡²»µ½ÀÏ»¢£¬²»ÄÜÔà¶Á ¡¡¡¡update Earth set Animal='ºï×Ó1' --¿ÉÒÔÐÞ¸Ä ¡¡¡¡waitfor delay '0:0:10' --10ÃëÖ®ºóÉÏÒ»¸öÊÂÎñÒѾ»Ø¹ö ¡¡¡¡select * from Earth --ÐÞ¸ÄÖ®ºóµÄÊý¾Ý£¬¶ø²»ÊǺï×Ó |
Ê£Ïµļ¸¸ö¼¶±ð£¬²»Ò»Ò»ÁоÙÀ²£¬×Ô¼ºÀí½â°É¡£
ÉèÖÃËø³¬Ê±Ê±¼ä
·¢ÉúËÀËøµÄʱºò£¬Êý¾Ý¿âÒýÇæ»á×Ô¶¯¼ì²âËÀËø£¬½â¾öÎÊÌ⣬Ȼ¶øÕâÑù×ÓÊǺܱ»¶¯£¬Ö»ÄÜÔÚ·¢ÉúËÀËøºó£¬µÈ´ý´¦Àí¡£
È»¶øÎÒÃÇÒ²¿ÉÒÔÖ÷¶¯³ö»÷£¬ÉèÖÃËø³¬Ê±Ê±¼ä£¬Ò»µ©×ÊÔ´±»Ëø¶¨×èÈû£¬³¬¹ýÉèÖõÄËø¶¨Ê±¼ä£¬×èÈûÓï¾ä×Ô¶¯È¡Ïû£¬ÊÍ·Å×ÊÔ´£¬±¨1222´íÎó¡£
ºÃ¶«Î÷Ò»°ã¶¼¾ßÓÐÁ½ÃæÐÔ£¬µ÷ÓŵÄͬʱ£¬Ò²ÓÐËûµÄ²»×ãÖ®´¦£¬ÄǾÍÊÇÒ»µ©³¬¹ýʱ¼ä£¬Óï¾äÈ¡Ïû£¬ÊÍ·Å×ÊÔ´£¬µ«Êǵ±Ç°±¨´íÊÂÎñ£¬²»»á»Ø¹ö£¬»áÔì³ÉÊý¾Ý´íÎó£¬ÄãÐèÒªÔÚ³ÌÐòÖв¶»ñ1222´íÎó£¬ÓóÌÐò´¦Àíµ±Ç°ÊÂÎñµÄÂß¼£¬Ê¹Êý¾ÝÕýÈ·¡£
--²é¿´³¬Ê±Ê±¼ä,ĬÈÏΪ-1
select @@lock_timeout
--ÉèÖó¬Ê±Ê±¼ä
set lock_timeout 0 --Ϊ0ʱ£¬¼´ÎªÒ»µ©·¢ÏÖ×ÊÔ´Ëø¶¨£¬Á¢¼´±¨´í£¬²»Ôڵȴý£¬µ±Ç°ÊÂÎñ²»»Ø¹ö£¬ÉèÖÃʱ¼äÐè½÷É÷´¦Àíºóʰ¡£¬Äãhold²»×¡µÄ¡£
×ÐϸÔĶÁ£¬Ï£ÍûÄÜ·ÖÏí¸øÄãÒ»µãµã¶«Î÷£¬Ð»Ð»£¬over¡£
|