¡¡¡¡
¼ÙÈçÁ½¸öÏß³ÌͬʱÐÞ¸ÄÊý¾Ý¿âͬһÌõ¼Ç¼£¬¾Í»áµ¼ÖºóÒ»Ìõ¼Ç¼¸²¸ÇǰһÌõ£¬´Ó¶øÒý·¢Ò»Ð©ÎÊÌâ¡£
ÀýÈ磺
¡¡¡¡Ò»¸öÊÛÆ±ÏµÍ³ÓÐÒ»¸öÓàÆ±Êý£¬¿Í»§¶Ëÿµ÷ÓÃÒ»´Î³öƱ·½·¨£¬ÓàÆ±Êý¾Í¼õÒ»¡£
Çé¾°£º
¡¡¡¡×ܹ²300ÕÅÆ±£¬¼ÙÉèÁ½¸öÊÛÆ±µã£¬Ç¡ºÃÔÚͬһʱ¼ä³öƱ£¬ËüÃÇ×öµÄ²Ù×÷¶¼ÊÇÏȲéѯÓàÆ±Êý£¬È»ºó¼õÒ»¡£
Ò»°ãµÄsqlÓï¾ä£º
¡¡¡¡
1
2
3
4
5
6
7
8
9
declare @count as int
begin tran
select @count=count from ttt
WAITFOR DELAY '00:00:05' --Ä£Äâ²¢·¢£¬¹ÊÒâÑÓ³Ù5Ãë
update ttt set count=@count-1
commit TRAN
SELECT * FROM ttt
¡¡¡¡
¡¡¡¡ÎÊÌâ¾ÍÔÚÓÚ£¬Í¬Ò»Ê±¼ä»ñÈ¡µÄÓàÆ±¶¼Îª300£¬Ã¿¸öÊÛÆ±µã¶¼×öÁËÒ»´Î¸üÐÂΪ299µÄ²Ù×÷£¬µ¼ÖÂÓàÆ±ÉÙÁË1£¬¶øÊµ¼Ê³öÁËÁ½ÕÅÆ±¡£
¡¡¡¡´ò¿ªÁ½¸ö²éѯ´°¿Ú£¬·Ö±ð¿ìËÙÔËÐÐÒÔÉÏ´úÂë¼´¿É¿´µ½Ð§¹û¡£
¶¨Òå½âÊÍ£º
¡¡¡¡±¯¹ÛËø£ºÏàÐŲ¢·¢ÊǾø´ó²¿·ÖµÄ£¬²¢ÇÒÿһ¸öÏ̶߳¼±ØÐëÒª´ïµ½Ä¿µÄµÄ¡£
¡¡¡¡ÀÖ¹ÛËø£ºÏàÐŲ¢·¢ÊǼ«ÉÙÊýµÄ£¬¼ÙÉèÔËÆø²»ºÃÓöµ½ÁË£¬¾Í·ÅÆú²¢·µ»ØÐÅÏ¢¸æËßËüÔٴγ¢ÊÔ¡£ÒòΪËüÊǼ«ÉÙÊý·¢ÉúµÄ¡£
±¯¹ÛËø½â¾ö·½°¸£º
¡¡¡¡
1
2
3
4
5
6
7
declare @count as int
begin tran
select @count=count from tb WITH(UPDLOCK)
¡¡¡¡ WAITFOR DELAY '00:00:05' --Ä£Äâ²¢·¢£¬¹ÊÒâÑÓ³Ù5Ãë
update tb set count=@count-1
commit tran
¡¡¡¡
¡¡¡¡ÔÚ²éѯµÄʱºò¼ÓÁËÒ»¸ö¸üÐÂËø£¬±£Ö¤×Ô²éѯÆðÖ±µ½ÊÂÎñ½áÊø²»»á±»ÆäËûÊÂÎñ¶ÁÈ¡Ð޸쬱ÜÃâ²úÉúÔàÊý¾Ý¡£
¡¡¡¡´Ó¶ø¿ÉÒÔ½â¾öÉÏÊöÎÊÌâ¡£
ÀÖ¹ÛËø½â¾ö·½°¸£º
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
--Ê×Ïȸø±í¼ÓÒ»ÁÐtimestamp
ALTER TABLE ttt ADD timesFlag TIMESTAMP NOT null
È»ºó¸üÐÂʱÅжÏÕâ¸öÖµÊÇ·ñ±»ÐÞ¸Ä
declare @count as int
DECLARE @flag AS TIMESTAMP
DECLARE @rowCount AS int
begin tran
select @count=COUNT,@flag=timesflag from ttt
WAITFOR DELAY '00:00:05'
update ttt set count=@count-1 WHERE timesflag=@flag --ÕâÀï¼ÓÁËÌõ¼þ
SET @rowcount=@@ROWCOUNT --»ñÈ¡±»Ð޸ĵÄÐÐÊý
commit TRAN
--¶ÔÐÐÊý½øÐÐÅжϼ´¿É
IF @rowCount=1
PRINT '¸üгɹ¦'
ELSE
PRINT '¸üÐÂʧ°Ü'
¡¡¡¡Õâ±ãÊÇÀÖ¹ÛËøµÄ½â¾ö·½°¸£¬¿ÉÒÔ½â¾ö²¢·¢´øÀ´µÄÊý¾Ý´íÎóÎÊÌ⣬µ«²»±£Ö¤Ã¿Ò»´Îµ÷Óøüж¼³É¹¦£¬¿ÉÄܻ᷵»Ø'¸üÐÂʧ°Ü'
±¯¹ÛËøºÍÀÖ¹ÛËø
¡¡¡¡±¯¹ÛËøÒ»¶¨³É¹¦£¬µ«ÔÚ²¢·¢Á¿Ìرð´óµÄʱºò»áÔì³ÉºÜ³¤¶ÂÈûÉõÖÁ³¬Ê±£¬½öÊʺÏС²¢·¢µÄÇé¿ö¡£
¡¡¡¡ÀÖ¹ÛËø²»Ò»¶¨Ã¿´Î¶¼Ð޸ijɹ¦£¬µ«Äܳä·ÖÀûÓÃϵͳµÄ²¢·¢´¦Àí»úÖÆ£¬ÔÚ´ó²¢·¢Á¿µÄʱºòЧÂÊÒª¸ßºÜ¶à¡£