我们也来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]