首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

一个关于记录不能重复的有关问题,

2012-01-22 
一个关于记录不能重复的问题,急两个客户端同时向数据库添加记录如id,bianhao,name,dz其中,id是自增量bianh

一个关于记录不能重复的问题,急
两个客户端同时向数据库添加记录
如id,bianhao,name,dz

其中,id是自增量
bianhao是从某个起始号如10001开始,当然,10001是和id=1是对应的
但在数据库中,biaohao   是不能重复的

添加界面出来   后,系统生成bianhao(从id得来),输入name和dz后就可以添加了.

这样就有一个问题,如果同时这时客户端都在添加,如同时添加一个   10023   这个编号的话,就会出错,因为有两个10023了,如果解决这个问题,还是设计的有问题

[解决办法]
你把bianhao设为主键不行吗
[解决办法]
应该设计的有问题,如同申请QQ号码一样,id可由系统自动升成,id生成的时机是在客户完全提交数据之后,而不能在客户提交数据之前。不然客户取消提交或其它原因提交失败会很麻烦的。

若id让用户自由选择也可以,但要有容错机制,提交时发现id重复(被占用),要由用户重选。
[解决办法]
保存时再查询一次,加一个判断,若有的话再+1
[解决办法]
自动编号怎么能是你自己算呢?你应该在数据库中设置自动编号字段。

如果你非要自己算也可以,一个客户端程序在算自动编号、插入数据之前,用数据库事务,锁定该表,只在这个客户端数据插入之后,其他客户端程序才能继续算自动编号、插入数据。


═══════════════════
http://www.egooglet.com 资料、源码下载

http://bbs.j2soft.cn 论坛交流
═══════════════════
[解决办法]
或者你先插入1行空值 得到ID,bianhao 然后返回给客户 bianhao
等客户填写资料提交的时候再UPDATE 这行
[解决办法]
这个问题常有人问。可以这样解决:

1 建一个新表,如 LastNumber,其中只有一条记录,就是当前最后编号。

2 所有客户端,在添加记录之前,需更新此表记录。因为表记录是自动加锁的,会禁止多个客户同时更新。这样,更新失败的客户需随机延时后重新读取该记录并再次尝试更新。更新成功的客户就可以将此编号作为添加记录的编号。我们暂且将此过程叫做取号。

3 如果编号的连续很重要,这里的问题是,取号成功的客户端如果由于种种原因(例如网络故障)添加记录失败,应将取得的号作为再次添加记录的编号,而不应丢弃,否则会造成编号不连续。
[解决办法]
顶楼上的,我们把这个逻辑叫做发号。
[解决办法]
http://blog.sina.com.cn/u/3ff287c1010003rq

热点排行