关于数据库中插入记录时抢占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人以上同时作该动作时会出现该问题)

如何解决?数据库如何锁定?
...全文
34 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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)。
  • 打赏
  • 举报
回复
发帖
MS-SQL Server

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
帖子事件
创建了帖子
2003-05-09 03:10
社区公告
暂无公告