问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求教mysql触发器生成流水号

发布网友 发布时间:2022-05-01 05:54

我来回答

2个回答

懂视网 时间:2022-05-01 10:15

DROP TABLE IF EXISTS `order_seq`;
CREATE TABLE `order_seq` (
`timestr` int(11) NOT NULL,
`order_sn` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP FUNCTION order_seq;


create function order_seq()
returns integer
begin
declare v_cnt integer;
declare v_timestr integer;
declare v_value integer ;
declare rowcount BIGINT;
set v_timestr =DATE_FORMAT(now(),‘%Y%m%d‘);
select ROUND(RAND()*100,0) + 1 INTO v_cnt;
UPDATE order_seq set order_sn = order_sn + v_cnt where timestr = v_timestr;
if ROW_COUNT() = 0 THEN
INSERT INTO oder_seq values(v_timestr,v_cnt);
end if;
select CONCAT(v_timestr,LPAD(order_sn,7,0)) INTO v_value from order_seq where timestr = v_timestr;
return v_value;
end;

--运行结果

SELECT order_seq();

mysql生成订单编号函数

标签:

热心网友 时间:2022-05-01 07:23

用存储过程生成流水号是很常用的,这里以生成订单编号的流水号作为示例。(新的一天的流水号从1开始,如:今天的订单编号是CD2013010900014,下一个订单编号将是CD2013010900015;明天的订单编号将从CD2013011000001开始)
生成规则:2位前缀+年月日+5位流水号 或者 2位前缀+年月日时分+5位流水号 或者 2位前缀+年月日时分秒+5位流水号。
测试订单表(test_orders):

[sql] view plain copy
CREATE TABLE `test_orders` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`orderNo` varchar(25) NOT NULL DEFAULT '',
`orderName` char(10) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=76 DEFAULT CHARSET=utf8

生成订单编号的存储过程(generate_orderNo):

[sql] view plain copy
CREATE DEFINER=PROCEDURE `generate_orderNo`(in orderNamePre char(2), in num int, out newOrderNo varchar(25))
BEGIN
DECLARE currentDate varCHAR (15) ;-- 当前日期,有可能包含时分秒
DECLARE maxNo INT DEFAULT 0 ; -- 离现在最近的满足条件的订单编号的流水号最后5位,如:SH2013011000002的maxNo=2
-- DECLARE l_orderNo varCHAR (25) ;-- 新生成的订单编号
-- DECLARE oldDate DATE ;-- 离现在最近的满足条件的订单编号的日期
DECLARE oldOrderNo VARCHAR (25) DEFAULT '' ;-- 离现在最近的满足条件的订单编号

if num = 8 then -- 根据年月日生成订单编号
SELECT DATE_FORMAT(NOW(), '%Y%m%d') INTO currentDate ;-- 订单编号形式:前缀+年月日+流水号,如:SH2013011000002
elseif num = 14 then -- 根据年月日时分秒生成订单编号
SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i%s') INTO currentDate ; -- 订单编号形式:前缀+年月日时分秒+流水号,如:SH2013011010050700001,个人不推荐使用这种方法生成流水号
else -- 根据年月日时分生成订单编号
SELECT DATE_FORMAT(NOW(), '%Y%m%d%H%i') INTO currentDate ;-- 订单形式:前缀+年月日时分+流水号,如:SH20130110100900005
end if ;

SELECT IFNULL(orderNo, '') INTO oldOrderNo
FROM test_orders
WHERE SUBSTRING(orderNo, 3, num) = currentDate
AND SUBSTRING(orderNo, 1, 2) = orderNamePre
and length(orderNo) = 7 + num
ORDER BY id DESC LIMIT 1 ; -- 有多条时只显示离现在最近的一条

IF oldOrderNo != '' THEN
SET maxNo = CONVERT(SUBSTRING(oldOrderNo, -5), DECIMAL) ;-- SUBSTRING(oldOrderNo, -5):订单编号如果不为‘‘截取订单的最后5位
END IF ;
SELECT
CONCAT(orderNamePre, currentDate, LPAD((maxNo + 1), 5, '0')) INTO newOrderNo ; -- LPAD((maxNo + 1), 5, '0'):如果不足5位,将用0填充左边

INSERT INTO test_orders (orderNo, orderName) VALUES (newOrderNo, 'testNo') ; -- 向订单表中插入数据
-- set newOrderNo = l_orderNo;
SELECT
newOrderNo ;
END

参数说明:orderNamePre:(输入)订单编号的前缀,这里设定为两个字符
num:(输入)将按什么规则生成流水号(生成规则有:年月日、年月日时分秒、年月日时分三种),可选的num有:8、12、14
newOrderNo:(输出)新生成的订单编号

生成中的一些说明在存储过程中已经写得很明确了,这里不再重复。
调用存储过程向表中插入数据:

[sql] view plain copy
SET @orderNo = '';
CALL `generate_orderNo`('SH', 12, @orderNo);
SELECT @orderNo;
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
急求高人解答 ···管理类的问题 ···!!!急急急···我会在线等... ...如果基层管理幅度为8,高层管理人员管理幅度为3,则该公司中层管理人员... ...发生化学变化的实质是( )A.分子间隔发生变化B.物质状态发生改变C... 下列变化不能说明发生了化学变化的是( )A.变化时有电子的得失或共用电... 下列描述正确的是( )A.固态物质的分子间无间隔B.液态物质的分子不断运动... 原来微信打开这个功能,能够看到马路上的街景,涨知识了! ...百度帐号被人在异地登录了,问题是没有任何人知道我的密码啊?而且也... 医疗事故纠纷和医疗损害纠纷的区别是什么 医疗纠纷与医疗事故的定义是什么? 医疗事故纠纷是指什么的 怎么删除支付宝账单会出现刷脸验证才能删除账单怎么回事 支付宝删除的账单怎么要刷脸是不是谁的身份证才能删 为什么删除支付宝账单还要刷脸 支付宝删除账单怎么要刷脸? 支付宝删除账单也需要刷脸吗 支付宝账单删除也要刷脸了吗 工行信用卡申请已受理是不是在审核 我在工商银行办个信用卡生肖猪卡显示是申请已受理还有显示银行电话显示领卡网点请问是通过了吗? 工行信用卡个人网银申请已受理领卡地址等等,是不是已经通过了审核? 奶香和西柚香那个好闻? 西柚的香味类似于橘子的香味吗? 红西柚的丰岛鲜果杯有没有朋友吃过,味道怎么样? 西柚味好闻还是香草味好闻 一束玫瑰花代表什么? 一束玫瑰花代表什么? 妈妈捧着一束什么样的玫瑰花走进房间? 妈妈捧着一束什么样的玫瑰花走进房间? 一束玫瑰花数量有什么含义?颜色有什么含义?价格大概是的多少? 怎么折玫瑰花最漂亮 我想把一束玫瑰花的美,体现在人的身上!用一句简短的话形容!我想送花给她,但是文采不好想不出优雅且浪 我用手机银行普通跨行转账能不能撤回来, 手机银行跨行转账之后还能退款吗 手机银行转账 卡号和姓名都对 就是选错银行了 钱能退回来吗 手机银行转账可以取消吗 手机银行转账后成功后可以申请返还吗 为什么老人手机打电话呼出会自动挂断 有时候通话几秒钟才挂断 接听也会自动挂断 恳求大 2020年健康管理师答题四大方法 延边大学校歌的三段歌词谁能帮我音译一下 桃李香满园,故人海归来心灵一点通。意思是? snnu是哪个大学 求祝老师生日快乐的祝福语要求藏头诗,祝周老师生日快乐 给老师平安夜祝福语短句 又是一年开学季, 依然桃李香满园。 成才不忘恩师教, 饮水自当思其源。 是什么意思呀? 求歌词:蓓蕾之歌 连元街校歌的歌词 有关教师节的诗歌 我们马上就要毕业了,想给老师过最后一次生日,请大家帮帮忙作一首藏头诗。(用 祝范老师生日快乐 来做) 请问桃李歌曲的歌词 教书育人几春秋的下一句是什么? 给老师怎么写生日快乐藏头诗