sqlserver ******锁*******,对一个表显式加解锁问题
时间:2011-11-03
来源:互联网
一个表,本来是标值量函数生成ID(规则+自增的编号)作为主键(其他信息用户决定),
这样只能一条一条地插入数据,没有问题
问题:
现需要一次插入多条数据,放在存储过程中实现,这样,我用标值量函数获取一个ID(用一个变量@temp保存),
作为主键,插入该条信息
然后第二条数据在前一个ID(变量@temp)的基础上+1作为主键,插入该条信息,依次循环
问题就出在你第二个ID的取法上,假如存储过程执行期间,有其他用户对该表执行插入操作,
你之前插入的那条数据放在存过过程中,存储过程开事物,在事物没有提交(完成本次插入数据操作)之前,
别的用户去ID的话,调用标值量函数,标值量函数从这个表中取一个最大的ID+1返回,这时不就出现生成的ID重复了,问题就在这里
所以我想这个存储过程执行期间,在第一个ID生成后(调用标值量函数后),就把这个锁定,任何用户不允许读&&写本表数据
但是不知道可行性,书上说sqlserver的锁机制不用用户显式地去控制,觉得对于常规的读写没问题,复杂一点的业务还是要去控制的,
锁机制的知识掌握的不多,希望sql版的前辈们指点,给出点资源学习也行
谢谢
作者: x_wy46 发布时间: 2011-11-03
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
begin tran
select * from tablename with (rowlock) where id=xxx
xxxx
commit tran
作者: zlp321002 发布时间: 2011-11-03
作者: roy_88 发布时间: 2011-11-03
锁一个表的某一行
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
begin tran
select * from tablename with (rowlock) where id=xxx
xxxx
commit tran
锁定行是什么效果,别的用户要从这个表中读数据的话会出现什么结果?
作者: x_wy46 发布时间: 2011-11-03
作者: zlp321002 发布时间: 2011-11-03
为了控制并发带来的问题,可以加行锁。
作者: fredrickhu 发布时间: 2011-11-04
作者: fredrickhu 发布时间: 2011-11-04
这个不会影响到其他行
作者: HEROWANG 发布时间: 2011-11-04
insert的时候 系统会自动加共享锁
为了控制并发带来的问题,可以加行锁。
怎么加锁,要加锁的话应该是排他锁吧?
作者: x_wy46 发布时间: 2011-11-04
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28