SQL 数据库中如何自动生成订单号
比如SOD130103001,听着!!!不要跟我说从表中选最大的ID然后再拼起来,考虑并发!并发!!!假如,某一秒内有3000个订单下来,这时候选最大ID会失效,最好用存...
比如SOD130103001,听着!!!不要跟我说从表中选最大的ID然后再拼起来,考虑并发!并发!!!假如,某一秒内有3000个订单下来,这时候选最大ID会失效,最好用存储过程,GUID那个不方便记录。
展开
4个回答
2016-01-03 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
SQL server中可以用sequence来实现订单号的自动生成。
例如创建如下序列:
create sequence orderSeq
as bigint --数据类型
start with 100000 --开始值
increment by 1 --增量
minvalue 1 --最小值
maxvalue 1000000--最大值
no cycle --不循环
cache 3 --设置cache大小为3
这样订单号就会从100000开始每次自增1生成。
例如创建如下序列:
create sequence orderSeq
as bigint --数据类型
start with 100000 --开始值
increment by 1 --增量
minvalue 1 --最小值
maxvalue 1000000--最大值
no cycle --不循环
cache 3 --设置cache大小为3
这样订单号就会从100000开始每次自增1生成。
2013-02-01
展开全部
不知道你什么数据库
如果是 Oracle 或者 DB2 或者 SQL Server 2012
那么果断的使用 序列号 Sequence 来处理。
如果是 Oracle 或者 DB2 或者 SQL Server 2012
那么果断的使用 序列号 Sequence 来处理。
更多追问追答
追问
SEQUENCE 和 IDENTITY不都是从1开始自增的么
追答
Sequence + 触发器啊.
因为 Sequence 是你 获取一次以后, 下一个人获取, 就是新的了。
不需要去检索当前表的 最大值。
Sequence 初始创建的时候, 可以从 1开始, 也可以从 100 开始, 取决于你怎么创建的。
例如:
SQL> CREATE SEQUENCE test_sequence2
2 increment by 1 -- 每次递增1
3 start with 1 -- 从1开始
4 nomaxvalue -- 没有最大值
5 minvalue 1 -- 最小值=1
6 NOCYCLE; -- 不循环
Sequence created.
序号号创建好了, 就是触发器里面, 完成
订单号 := 'SOD' || TO_CHAR( test_sequence2.nextval )
如果你那个 订单号的格式, 还是 SOD 后面固定9位数字的
如果从1开始, 要求是 SOD0000001 的话
那么在使用个数据库的函数, 把 1 格式化为 0000001,
然后再用 SOD 与这个字符串合并
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果只有数字的话采用自动编号,有字母的话,建议不用订单号做主键 这样就不会考虑并发问题了。
例如两个表 A表里面有ID字段 自动增加类型,在A表创建一条记录后获取当时创建的ID号,这个用存储过程很容易(sql server里面,oracle不清楚),在B表里面 订单号就用字母加ID 不会重复。
一秒1000条不清楚,但是150条/秒 ,是没问题的,我做过。
例如两个表 A表里面有ID字段 自动增加类型,在A表创建一条记录后获取当时创建的ID号,这个用存储过程很容易(sql server里面,oracle不清楚),在B表里面 订单号就用字母加ID 不会重复。
一秒1000条不清楚,但是150条/秒 ,是没问题的,我做过。
追问
ID有一点我很烦恼,就是我想在增加到1000的时候将ID复位为1值开始,但是复位之后我就插不进去了 ,因为ID好像是默认的主键,这个有解决办法吗?还有如果我没有ID这个字段。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在你的数据库中设定一个自增列呗,订单号就根据自增列产生。例如列号1,订单就是SOD0000001,这个插入成功就会自动生成订单号,又不会重复。
追问
那订单号就不存储在数据库中了吗 我打算用他做主键的
追答
为什么不能存储在数据库中,你这样写(假设就两列,ID-自增列,ShopOrder-你要的Key),表明叫UniqID.
Insert into UniqID (ShopOrder) Values('Temp')
Update UniqID Set ShopOrder = 'SOD' + Right(1000000 + ID,6)
Where ShopOrder = 'Temp'
如果你一定要这列的话。何必太在意Key在这列上。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询