首页 新闻 会员 周边

如何设计表并实现以日期年份、月份和自增序号组合成编号作为主键?

0
悬赏园豆:80 [已解决问题] 解决于 2015-03-08 18:31

 编号示例例如:2015010001  2015010002 ....

                     2015020001  2015020002 ....

 要求:表结构中主键字段ID存储该序号,每隔个月序号将从1重新计数。

 

直接取id最大,可能会出现并发产生相同的编号,效率不高。

请问各位大神有什么好方法?

 

 

                      

Proxima的主页 Proxima | 初学一级 | 园豆:120
提问于:2015-02-26 23:28
< >
分享
最佳答案
1

用一个No表,来存取datetime和No。然后用一个存储过程还return一个主键字段ID。先更新No表,根据datetime不同No+1,然后取最后的值。结合时间构建ID。注意加锁。

收获园豆:50
幻天芒 | 高人七级 |园豆:37175 | 2015-02-27 09:19
其他回答(3)
0

设置一个自增的字符串和日期拼接唄,查询的时候也好查了

_Vegetables | 园豆:586 (小虾三级) | 2015-02-27 11:10
1

方法有好多,不过没有什么方法是又好用,又效率高,又可以一劳永逸,又可以三句话说清楚的。

如果你使用WINFORM开发,理论上来说超过100个客户端的项目的话,已经是说多不多,说少不少的项目费用了,专门拨个一周时间为这个设计一个方案也是可行的。

主要考虑几点

1、客户机的日期时间可能是错的。

2、取编号、增加编号时的并发冲突处理

3、并发冲突处理不完善造成的单据号重复如何处理。

4、刚刚看了一下,你打算用这个当主键,这个我是不建议的。但你硬要拿这个当主键的话,其实主键冲突肯定是保存不了的,所以你也不用管并发冲突了,只要在保存的时候处理一下。

5、再次说明,不要用这个当主键。

收获园豆:20
爱编程的大叔 | 园豆:30839 (高人七级) | 2015-02-27 11:39
1

再用一个单独的表控制生成这个编号

收获园豆:5
Zachary_Fan | 园豆:762 (小虾三级) | 2015-03-04 17:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册