枫叶飞翔 发表于 2015-6-29 12:57:30

我们也来hold住--优化SQL SERVER锁的使用

  秒杀已经很不陌生了,秒杀对于我们程序员来说更多的是并发带来的思考,也许有天才考虑的是如何做秒杀器来横扫“秒杀江湖”。前日应邀来优化秒杀的sql。
  让我们来看看这秒杀的存储过程。(部分代码如下)
  


create PROCEDURE .
    @userid nvarchar(64),
    @killId int
AS
BEGIN
    BEGIN TRAN
      declare @storage int
      --判断库存
      select @storage=storage from killProduct with(tablockx) where killID=@killId
      IF(@@rowcount = 0)
      BEGIN
            COMMIT TRAN
            select '没货'
            return
      END
      IF(@storage 0 AND(SELECT COUNT(0) FROM KILLlIST(NOLOCK) WHERE USERID=@USERID)=0
         
         IF(@storage>0)
         BEGIN
            --秒杀成功
         END
         ELSE
         BEGIN
            --失败
         END  
  holdlock,hold住此行数据(rowlock),直到整个事务结束。
  此处可以将holdlock换成UPDLOCK来实现同样的效果。
  秒杀你hold住了吗?您在处理这样的并发时又是如何hold住的呢?请大家分享之!
  
  
页: [1]
查看完整版本: 我们也来hold住--优化SQL SERVER锁的使用