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

SQL 数据库中如何自动生成订单号,第1张

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生成。

可以利用asp代码生成,如果是数据库端的话,应该是不可能的,自动编号不可能中间,不生成那些数字就直接跳过的。我写了端代码,你看下吧,可以不使用自动编号,就搞定你说的功能。数据表ordertable,订单字段ordernum。ordernum设置成文本类型。 dim num,mydate,year,month,day,sql

mydate=date()

year=year(mydate)

month=year(mydate)

day=year(mydate)if month<10 then

month="0"&month

end ifif day<10 then

day="0"&day

end ifmydate=year&month&day sql="select ordernum form ordertable where ordernum like"&mydate&"% order by ordernum desc"

set rs=execute(sql)

if rs.eof or rs.bof then

num=mydate&"001"

else

num=right(rs("ordernum"),3)

num=cint(num)

if num=999 then

response.write "今日的订单号码,超越上限。此订单仍将有效,该订单号将记录为"&mydate&"1000,请管理员,尽快处理!"end if

num=num+1end if if num="001" thenresponse.write "订单超量,此订单将不能存储,请与管理员联系,管理员号码为:XXXXXXXX"

else num=mydate&"num"

sql="insert into ordertable set ordernum='"&num&"'"

execute(sql) if err thenresponse.write"订单保存出现错误,请重试!"err.clearend if

end if

由于我在工作中遇到这个问题,借此与大家分享一下各大电子商务网站订单号的生成方式。

订单号概念

它是您在购物网站购物后获得的订单号,记录的是购物订单信息。

作用

在您需要与购物网站进行订单查询等 *** 作时,需要给购物网站提供商家订单号。

几种下单途径?

web网站下单 打电话到呼叫中心(CallCenter)下单 手机wap下单

如果采用单数据库来存储的话,随着订单量的增加,单库的写压力增大,造成数据库服务器性能下降。一般会采用分库来缓解数据库服务器的压力。

那么怎么来进行分库呢?

web来源订单,存入web订单库。

CallCenter来源订单,存入CallCenter订单库。

wap来源订单,存入wap订单库。

最终,将这三种类型的数据库同步到订单主库中。

问题来了,怎么把不同的订单同步到订单主库呢?

电商网站一般利用订单号来作为订单表的主键。因此,我们必须保证订单号不重复,才能将订单安全的同步到订单主库中。

订单命名规定唯一性

这个大家都明白,主要保证订单号不重复。

安全性

订单编号不能透露你公司的真实运营信息,比如你的订单就是流水号的话,那么别人就可以从订单号推测出你公司的整体运营概括了。所以订单编码必须是除了你们公司少部分人外,其他人基本看不懂的。可以参考京东和淘宝的编码规则。

不能使用大规模随机码

因为大规模的随机码随机生成,因为本身就没有意义所以无所谓泄密了。但是事实上这种编码规则在实现上会有很大问题的。随机码满足第二点安全性要求,为了满足唯一性,那就得在生成随机码的时候对比历史数据是否有重复,如果你的订单数量到达了十万次,你每次生成订单编码时就得对比十万条历史数据。

随机码就不能在编码中使用了吗?小规模的随机码是可以使用的,比如2~3位,这种随机码一般都是和流水号等结合使用,主要作用是为了隐藏流水号的真实数据而进行使用的。

防止并发

主要针对编码中有时间的设定。

控制位数

订单号的作用就是便于查询。一般正常使用场景应该是订单出异状或者退货的时候,用户将订单号报给客服,由客服进行查询。所以一般在10~15位为好。目前京东11位,淘宝16位。

怎么保证订单号的唯一性订单号命名规则来生成

比如“业务编码 + 时间戳 + 机器编号[前4位] + 随机4位数 + 毫秒数”。

说明:业务编码(OrderType: Web=1 CallCenter=2 Wap=3) 机器编号(用来表示由那台服务器生成的订单)

伪代码如下:

缺点:这种方式在高并发下会频繁更新订单量记录表,很容易产生锁表。但是锁表问题也是可以解决的,加一层缓存。

全局订单号数据池来生成

数据库创建一个订单号数据库表(order_id_generator);利用python脚本生成一批订单号,将这批订单号存入到order_id_generator表中。生成订单时,会首先调用事务GET_ORDER_ID_FOR_REGISTER,获得当前订单号,再生成订单。这样就保证了子库订单号不会重复。

数据库代码如下:

伪代码如下:

总结

订单号的生成方案,需要根据目前的订单量而定;因为各种方案都有各自的使用场景。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6460242.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-22
下一篇 2023-03-22

发表评论

登录后才能评论

评论列表(0条)

保存