+ -
当前位置:首页 → 问答吧 → 编号重复的问题

编号重复的问题

时间:2011-12-06

来源:互联网

编号是年月日+自动编号 比如:20111013_001 后面的001是自动增长的

在加载页面的时候是自动获取的 但是如果两个人同时给表里面添加数据时 编号就会重复
因为在加载页面的时候 两个人的页面显示的编号是一样的 这个应该怎样解决

作者: liurun1991   发布时间: 2011-12-06

20111013_user_001

作者: a67251026   发布时间: 2011-12-06

每次读取001 select max()

当提交入库时,检测该编号是否存在,如果存在,提示,重新获取

因为存在某个人打开了界面,获取了编号,但是一直未操作,然后另外一个人打开界面,就会放生重复情况

因此,就需要在提交的时候判断一下,是否存在

作者: Return_false   发布时间: 2011-12-06

20111013_user_001 user?不懂

作者: liurun1991   发布时间: 2011-12-06

在存储数据之前扫一下表,取最大自增号就好了吧

作者: myelio   发布时间: 2011-12-06

引用 3 楼 liurun1991 的回复:
20111013_user_001 user?不懂

添加时候加个用户 在加个编号 那样就唯一了

作者: a67251026   发布时间: 2011-12-06

但是我是想让编号在加载的时候就显示在文本框里 当时两边的页面都是获取数据库里面的max(id)+1的 不能判断这个id有没有被占用

作者: liurun1991   发布时间: 2011-12-06

引用 5 楼 a67251026 的回复:
引用 3 楼 liurun1991 的回复:
20111013_user_001 user?不懂

添加时候加个用户 在加个编号 那样就唯一了

关键是 想让后面自动增长 那样的唯一性

作者: liurun1991   发布时间: 2011-12-06

引用 4 楼 myelio 的回复:
在存储数据之前扫一下表,取最大自增号就好了吧


那两边取的都是最大编号呀

作者: liurun1991   发布时间: 2011-12-06

引用 2 楼 return_false 的回复:
每次读取001 select max()

当提交入库时,检测该编号是否存在,如果存在,提示,重新获取

因为存在某个人打开了界面,获取了编号,但是一直未操作,然后另外一个人打开界面,就会放生重复情况

因此,就需要在提交的时候判断一下,是否存在

作者: qydvip   发布时间: 2011-12-06

引用 7 楼 liurun1991 的回复:
引用 5 楼 a67251026 的回复:
引用 3 楼 liurun1991 的回复:
20111013_user_001 user?不懂

添加时候加个用户 在加个编号 那样就唯一了

关键是 想让后面自动增长 那样的唯一性


取该用户的最大一个自动增长添加的编号

作者: a67251026   发布时间: 2011-12-06

引用 10 楼 a67251026 的回复:
引用 7 楼 liurun1991 的回复:
引用 5 楼 a67251026 的回复:
引用 3 楼 liurun1991 的回复:
20111013_user_001 user?不懂

添加时候加个用户 在加个编号 那样就唯一了

关键是 想让后面自动增长 那样的唯一性


取该用户的最大一个自动增长添加的编号


取得就是最大编号 关键是两边取得都是最大编号 同时添加的话 编号就一样了

作者: liurun1991   发布时间: 2011-12-06

引用 11 楼 liurun1991 的回复:
引用 10 楼 a67251026 的回复:
引用 7 楼 liurun1991 的回复:
引用 5 楼 a67251026 的回复:
引用 3 楼 liurun1991 的回复:
20111013_user_001 user?不懂

添加时候加个用户 在加个编号 那样就唯一了

关键是 想让后面自动增长 那样的唯一性


取该用户的最大一个自动增长添加的编号


取得……


自动增长编号会一样??

作者: a67251026   发布时间: 2011-12-06

引用 12 楼 a67251026 的回复:
引用 11 楼 liurun1991 的回复:
引用 10 楼 a67251026 的回复:
引用 7 楼 liurun1991 的回复:
引用 5 楼 a67251026 的回复:
引用 3 楼 liurun1991 的回复:
20111013_user_001 user?不懂

添加时候加个用户 在加个编号 那样就唯一了

关键是 想让后面自动增长 那样的唯一性


取……


因为是两个人同时获取 所以获取的ID就是一样的 怎样才能让一个人添加的时候 另一个人不能添加 给他提示说不能添加

作者: liurun1991   发布时间: 2011-12-06

插入前lock一下。
或者在产生新编号的时候lock

作者: chen_ya_ping   发布时间: 2011-12-06

典型的订票系统问题

作者: charles_y   发布时间: 2011-12-06

用的就是 lock 还是会出现那种现象

作者: liurun1991   发布时间: 2011-12-06

引用 13 楼 liurun1991 的回复:
引用 12 楼 a67251026 的回复:
引用 11 楼 liurun1991 的回复:
引用 10 楼 a67251026 的回复:
引用 7 楼 liurun1991 的回复:
引用 5 楼 a67251026 的回复:
引用 3 楼 liurun1991 的回复:
20111013_user_001 user?不懂

添加时候加个用户 在加个编号 那样就唯一了

关键……

那你在第一个人获取记录的时候改变下状态,另一个人再获取就判断此状态的值,并提示。

作者: a67251026   发布时间: 2011-12-06

状态怎么弄?请您详解 谢谢!

作者: liurun1991   发布时间: 2011-12-06

“在加载页面的时候是自动获取的 ”  

获取的时候并改变该数据的一个状态值(当然你先要有这样的字段)

改变状态的时候还要加上一个时间的记录(设定添加时间),以免下次有人修改的时候无法修改。

作者: a67251026   发布时间: 2011-12-06

设置表中约束,也就是20111013_001这一列的唯一约束,当在执行SQL的时候,如果违反约束,肯定抛出异常,你只要接受异常就可以了,这样的话,这一列应该不会重复.

作者: Return_false   发布时间: 2011-12-06

双重锁,或者加约束,我怎么感觉跟单例模式有类似。

作者: peng2739956   发布时间: 2011-12-06

定义一个静态变量,来存放从数据库读出来的最大编号
每次有用户访问的时候,给这个静态变量+1就好。
在访问最大编号这个变量时,要想判断是否为空,空就重新读取,。

作者: xu8512   发布时间: 2011-12-06