多用户操作情况下如何保证自动生成证号的连续性和唯一性?有一个表,中有一列“证号”,每当向这个表加行时,需要先查出当前最大的证号是几(整数),然后把这个号加一做为新insert行的“证号”。如果是一个用户操作没什么可说的,select max(证号)+1 新证号 from 表 就行了。
但是多用户时,当一个用户单击了“新键”按钮,就该得到一个“证号”,并填入到自己的操作界面上的证号框内,可是另一个用户这时也点了“新健”,他的号怎么办?在第一个用户的“证号”的基础上再加1?那万一第一个用户又决定取消本次操作了,不是出事了么?出现了证号的不连续。大侠们请出手相助。
但是多用户时,当一个用户单击了“新键”按钮,就该得到一个“证号”,并填入到自己的操作界面上的证号框内,可是另一个用户这时也点了“新健”,他的号怎么办?在第一个用户的“证号”的基础上再加1?那万一第一个用户又决定取消本次操作了,不是出事了么?出现了证号的不连续。大侠们请出手相助。
insert tb values('中国人')
insert tb values('CSDN人')select * from tbdrop table tb证号 名称
----------- ----------
1 中国人
2 CSDN人(2 行受影响)
create table tb(证号 int identity(100001,1),名称 varchar(200))
insert tb values('中国人')
insert tb values('CSDN人') select * from tb drop table tb 证号 名称
----------- ----------
100001 中国人
100002 CSDN人(2 行受影响)
关键我的表已建立且有大量数据
不想从头再建表
如何将现有的"证号"改成自增的呢?
但是多用户时,当一个用户单击了“新键”按钮,就该得到一个“证号”,并填入到自己的操作界面上的证号框内,可是另一个用户这时也点了“新健”,他的号怎么办?在第一个用户的“证号”的基础上再加1?那万一第一个用户又决定取消本次操作了,不是出事了么?出现了证号的不连续。
————————————————————————————————————————
1:新建的时候,不生成编号,到录入的时候生成。 2:一般是把新生成的编号插入到专门(保存编号的表)中。每次其他用户操作时查询(保存编号的表)最大的编号。
并把新生成的编号保存在(保存编号的表),缺点:该用户取消操作,但是编号已经生成,那么无疑会形成断号。
谢谢这么多热心的人
但是没有一个说到点子上
我的表是已有的,许多列,我不想重新建立
但是没人能说明如何把已存在的非自增列变成自增列
还有可能大家都没明白我的程序是有客户端的,客户端发送一个insert后,自增列会产生一个数,我的客户端需要取到这个数并显示在表单上。至于楼上的说法,我觉得有对付之嫌,不过还是感谢您花时间关心我的问题