一个经常出现的问题,关于数据库增加记录的

时间:2022-10-13 16:39:39
我们在开发多用户系统一定出现这样的情况:
你要求一张表的主键是唯一的连续的,而这个主键是系统自动生成的:
(1)但几个用户同时在添加记录时怎样保证主键的唯一和连续的,可能某用户是添加的是多条记录,如:甲用户添加两条记录,但添加主键是2003122201,乙用户这时候添加了一条2003122202,这时甲添加第二条时只能是200312223.
(2)但在保存是甲保存成功,(2003122201和2003122203),已没有保存成功(2003122202),这样在下一位用户添加记录主键必须先是(2003122202),在是(2003122204)
(3)但删除(2003122202)时,这样在下一位用户添加记录主键必须先是(2003122202)

13 个解决方案

#1


up

#2


up

#3


up too

#4


怎么没有人关注啊

#5


如果你在存储过程中做,可以建一个事务来控制,在一个人操作的时候锁定表!防止大家同时操作!

#6


to fengbincn(坏坏) 
能不能说点具体点,我想锁定表是不行的,我是要多个用户同时使用的

#7


为了保证你对主键的要求

只能在锁表期间,让其他的等待

用事务处理是比较方便,但是效率不高

可能还有其他好的算法,那就比较繁了


#8


这个问题我也遇到过,是这么解决的。

在真正写入数据库的时候才能得到真正的编号。
1.把这个编号变成非主键(也不要Unique),另外弄一个比如自增长的字段作为主键;
2.客户在提交前他不能知道真正的编号,只有提交了之后才行;
3.给此表添加一个触发器,AfterInsert,Select Max(编号)+1 from xxxx,把此编号写入表中;

#9


up

#10


pazee(耙子) 说的是可以的`

#11


对于多用户,如果你需要锁定表的时间太长是不适合事务处理的。
不过,你可以改变方式,比如象pazee(耙子)说的
也可以改变你操作表的方式,比如,把每个用户的操作时间缩小,
只要用户感觉不到长时间等待就可以了!

#12


不知道有没有更好的办法

#13


up

#1


up

#2


up

#3


up too

#4


怎么没有人关注啊

#5


如果你在存储过程中做,可以建一个事务来控制,在一个人操作的时候锁定表!防止大家同时操作!

#6


to fengbincn(坏坏) 
能不能说点具体点,我想锁定表是不行的,我是要多个用户同时使用的

#7


为了保证你对主键的要求

只能在锁表期间,让其他的等待

用事务处理是比较方便,但是效率不高

可能还有其他好的算法,那就比较繁了


#8


这个问题我也遇到过,是这么解决的。

在真正写入数据库的时候才能得到真正的编号。
1.把这个编号变成非主键(也不要Unique),另外弄一个比如自增长的字段作为主键;
2.客户在提交前他不能知道真正的编号,只有提交了之后才行;
3.给此表添加一个触发器,AfterInsert,Select Max(编号)+1 from xxxx,把此编号写入表中;

#9


up

#10


pazee(耙子) 说的是可以的`

#11


对于多用户,如果你需要锁定表的时间太长是不适合事务处理的。
不过,你可以改变方式,比如象pazee(耙子)说的
也可以改变你操作表的方式,比如,把每个用户的操作时间缩小,
只要用户感觉不到长时间等待就可以了!

#12


不知道有没有更好的办法

#13


up