sqlserver行加锁的问题

cy214 2003-09-24 03:08:07
表的第一列是主键 ID_NUMBER 当时没有设置为标识 我现在每次插入记录的话需要在程序里先 select出max(ID_NUMBER) 然后把ID_NUMBER+1作为新记录的ID_NUMBER 但是这样做不能保证得到最大ID再加1后到插入数据的这段时间没有其他的客户端插入新记录(有几十个客户端在读写这个表) 所以我想知道怎样才能保证获取的ID号不被别人占用 或者按照我这个过程和表的情况有没有其他的好的方法 谢谢
...全文
170 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-09-24
  • 打赏
  • 举报
回复
企业管理器-->右键你的表-->设计表-->选中一int类型字段-->下面有个属性叫“标识”的

-------------------------------------------------------或用锁。


1 如何锁一个表的某一行


A 连接中执行

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

begin tran

select * from tablename with (rowlock) where id=3

waitfor delay '00:00:05'

commit tran

B连接中如果执行

update tablename set colname='10' where id=3 --则要等待5秒

update tablename set colname='10' where id<>3 --可立即执行

2 锁定数据库的一个表

SELECT * FROM table WITH (HOLDLOCK)


注意: 锁定数据库的一个表的区别

SELECT * FROM table WITH (HOLDLOCK)
其他事务可以读取表,但不能更新删除

SELECT * FROM table WITH (TABLOCKX)
其他事务不能读取表,更新和删除
cy214 2003-09-24
  • 打赏
  • 举报
回复
这个库已经用了一段时间了 原有的客户端我不知道是怎么处理这个问题的 但是从他们的使用情况来看原有的多个客户端和这个表一直工作正常 我再用上面的方法试验的时候第一次就返回了主键已被使用的警告 所以不敢那么用了
不知道把一个字段设置为标识后会不会影响原有程序往数据库里写入数据? 按照一般情况来说
cy214 2003-09-24
  • 打赏
  • 举报
回复
这个库已经用了一段时间了 原有的客户端我不知道是怎么处理这个问题的 但是从他们的使用情况来看原有的多个客户端和这个表一直工作正常 我再用上面的方法试验的时候第一次就返回了主键已被使用的警告 所以不敢那么用了
不知道把一个字段设置为标识后会不会影响原有程序往数据库里写入数据? 按照一般情况来说
txlicenhe 2003-09-24
  • 打赏
  • 举报
回复

如何用语句添加或去除表字段的自增属性
http://expert.csdn.net/Expert/topic/2217/2217137.xml?temp=.8302118
txlicenhe 2003-09-24
  • 打赏
  • 举报
回复
1: 改为标识列
2:写一个自定义函数来得到ID号,在表中为该字段设默认值。

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧