关于数据库中插入记录时抢占ID号的解决办法。

oldsky 2003-05-09 03:10:27
开发环境:vb6
数据库:SQL server 2000
表: ID [char(16)],primary key
Field_1 ,not null
Field_2 ,not null
Field_3 ,null
... ,null
ID其实是由8位软件狗ID + 8位数字 组成的。
每次插入新记录时,将当前的ID加1。
如当前ID为:1000000020000001
新插入ID为: 1000000020000002
做插入动作时,一般先需要计算新ID,获取新ID后再插入数据库,这样会出现的问题就是抢占ID.(实际测试到当5人以上同时作该动作时会出现该问题)

如何解决?数据库如何锁定?
...全文
60 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
leimin 2003-05-09
  • 打赏
  • 举报
回复
1.这样会出现的问题就是抢占ID??是在等待,还是有DEADLOCK发生?
2.用事务来解决,或者可以更改事务的级别来提高事务的并发.
饮水需思源 2003-05-09
  • 打赏
  • 举报
回复
开始保存时开启事务,从数据库中读取最大单号再加1,结束保存时提交事务
xiyahui 2003-05-09
  • 打赏
  • 举报
回复
是不是可以设置一个辅助表用来记录id号,然后每次用的时候对其加排它锁。
CrazyFor 2003-05-09
  • 打赏
  • 举报
回复
加事务,在一个事务中完成获取新ID及插入数据库的操作.
Happiness 2003-05-09
  • 打赏
  • 举报
回复
IDENTITY(属性)
在表中创建一个标识列。该属性与 CREATE TABLE 及 ALTER TABLE Transact-SQL 语句一起使用。



说明 IDENTITY 属性与 SQL-DMO Identity 属性不同,后者表现列的行标识属性。


语法
IDENTITY [ ( seed , increment ) ]

参数
seed

装载到表中的第一个行所使用的值。

increment

增量值,该值被添加到前一个已装载的行的标识值上。

必须同时指定种子和增量,或者二者都不指定。如果二者都未指定,则取默认值 (1,1)。

34,837

社区成员

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

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