mysql 存储过程生成流水号
/** @v_serial_number 最新流水号输出 @prefix 前缀 @suffix 后缀 */ CREATE PROCEDURE `generate_serial_number`(OUT v_serial_number VARCHAR(32), prefix VARCHAR(20), suffix VARCHAR(20)) BEGIN DECLARE v_prefix VARCHAR(32); DECLARE v_suffix VARCHAR(32); DECLARE v_serial_no INT DEFAULT 0; -- 根据前缀查询是否存在 SELECT COUNT(*) INTO @v_cnt FROM sys_serial_number sn WHERE sn.`prefix` = prefix FOR UPDATE; -- 如果存在 IF @v_cnt > 0 THEN -- 获取当前序列号 SELECT `prefix`, `suffix`, `serial_number` INTO v_prefix, v_suffix, v_serial_no FROM sys_serial_number ssn WHERE ssn.`prefix` = prefix FOR UPDATE; -- 更新序列号 UPDATE sys_serial_number ssnn SET ssnn.`serial_number` = `serial_number` + 1, ssnn.`update_time` = NOW() WHERE ssnn.`prefix` = prefix; -- 生成结果 SET v_serial_number = CONCAT(v_prefix, LPAD(v_serial_no + 1, 6, 0), v_suffix); ELSE SET v_prefix = prefix; SET v_suffix = suffix; INSERT INTO `sys_serial_number` (`prefix`, `suffix`, `serial_number`,`create_time`) VALUES (v_prefix, v_suffix, 1, NOW()); SET v_serial_number = CONCAT(v_prefix, LPAD(v_serial_no + 1, 6, 0), v_suffix); END IF; END;
执行存储过程:
CALL generate_serial_number(@v_serial_number, 'NO', ''); SELECT @v_serial_number;
这里有个坑 如果存储过程中表一定要跟别名,记住一定要跟别名
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)