你要求一张表的主键是唯一的连续的,而这个主键是系统自动生成的:
(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,把此编号写入表中;
在真正写入数据库的时候才能得到真正的编号。
1.把这个编号变成非主键(也不要Unique),另外弄一个比如自增长的字段作为主键;
2.客户在提交前他不能知道真正的编号,只有提交了之后才行;
3.给此表添加一个触发器,AfterInsert,Select Max(编号)+1 from xxxx,把此编号写入表中;
#9
up
#10
pazee(耙子) 说的是可以的`
#11
对于多用户,如果你需要锁定表的时间太长是不适合事务处理的。
不过,你可以改变方式,比如象pazee(耙子)说的
也可以改变你操作表的方式,比如,把每个用户的操作时间缩小,
只要用户感觉不到长时间等待就可以了!
不过,你可以改变方式,比如象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,把此编号写入表中;
在真正写入数据库的时候才能得到真正的编号。
1.把这个编号变成非主键(也不要Unique),另外弄一个比如自增长的字段作为主键;
2.客户在提交前他不能知道真正的编号,只有提交了之后才行;
3.给此表添加一个触发器,AfterInsert,Select Max(编号)+1 from xxxx,把此编号写入表中;
#9
up
#10
pazee(耙子) 说的是可以的`
#11
对于多用户,如果你需要锁定表的时间太长是不适合事务处理的。
不过,你可以改变方式,比如象pazee(耙子)说的
也可以改变你操作表的方式,比如,把每个用户的操作时间缩小,
只要用户感觉不到长时间等待就可以了!
不过,你可以改变方式,比如象pazee(耙子)说的
也可以改变你操作表的方式,比如,把每个用户的操作时间缩小,
只要用户感觉不到长时间等待就可以了!
#12
不知道有没有更好的办法
#13
up