+ -
当前位置:首页 → 问答吧 → 【求助】updlock的问题

【求助】updlock的问题

时间:2011-11-25

来源:互联网

功能描述:做已存在用户名校验的功能,防止同一时间有多个用户注册同一用户名发生异常

在事务中执行select * from user(updlock) where name = 'admin',想要实现事务提交前锁定表,不再允许其他事务进行增删改操作。

但实际情况是在事务提交前,别的事务虽然不能删改,但是却可以添加数据。虽然用tablockx能实现,但是会影响到其它进程读取数据,严重影响性能。像这种情况我该用什么锁呢?

作者: hongshengyu   发布时间: 2011-11-25

理论上,要阻止插入只能用表锁
updlock并不能阻止插入动作

这个靠锁不好控制,为什么不加个唯一索引?

作者: NBDBA   发布时间: 2011-11-25

holdlock--加上持续锁
SQL code
select * from [user] with (updlock,holdlock)where name = 'admin'

作者: roy_88   发布时间: 2011-11-26

引用 2 楼 roy_88 的回复:

holdlock--加上持续锁
SQL code
select * from [user] with (updlock,holdlock)where name = 'admin'
能解释下什么意思吗?这样会不会发生死锁呀?单独用holdlock避免不了死锁。

作者: hongshengyu   发布时间: 2011-11-26