SQL 数据库中如何自动生成订单号

比如SOD130103001,听着!!!不要跟我说从表中选最大的ID然后再拼起来,考虑并发!并发!!!假如,某一秒内有3000个订单下来,这时候选最大ID会失效,最好用存... 比如SOD130103001,听着!!!不要跟我说从表中选最大的ID然后再拼起来,考虑并发!并发!!!假如,某一秒内有3000个订单下来,这时候选最大ID会失效,最好用存储过程,GUID那个不方便记录。 展开
 我来答
千锋教育
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生成。
景联文科技
2024-06-11 广告
一、什么是数据标注?1. 数据标注定义数据标注是对未经处理的语音、图片、文本、视频等数据进行加工处理, 并转换为机器可识别信息的过程。原始数据一般通过数据采集获得, 随后的数据标注相当于对数据进行加工, 然后输送到人工智能算法和模型里完成调... 点击进入详情页
本回答由景联文科技提供
匿名用户
2013-02-01
展开全部
不知道你什么数据库

如果是 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 与这个字符串合并
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
de98441201
2013-02-01 · TA获得超过153个赞
知道小有建树答主
回答量:303
采纳率:0%
帮助的人:197万
展开全部
如果只有数字的话采用自动编号,有字母的话,建议不用订单号做主键 这样就不会考虑并发问题了。
例如两个表 A表里面有ID字段 自动增加类型,在A表创建一条记录后获取当时创建的ID号,这个用存储过程很容易(sql server里面,oracle不清楚),在B表里面 订单号就用字母加ID 不会重复。
一秒1000条不清楚,但是150条/秒 ,是没问题的,我做过。
追问
ID有一点我很烦恼,就是我想在增加到1000的时候将ID复位为1值开始,但是复位之后我就插不进去了 ,因为ID好像是默认的主键,这个有解决办法吗?还有如果我没有ID这个字段。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9b9910e
2013-02-01 · TA获得超过397个赞
知道小有建树答主
回答量:721
采纳率:0%
帮助的人:443万
展开全部
在你的数据库中设定一个自增列呗,订单号就根据自增列产生。例如列号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在这列上。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式