mysql使用触发器生成唯一订单号,
需求:订单号唯一,并且期望是时间格式加其他字符串,
实现:采用触发机制,在新增时根据新增id值加1作为订单生成的随机且确定唯一的数,因为id唯一;
遇到问题:新增时不能提前知道id值,
解决:取到当前表中最大值+1即为id;
业务需要研究几个小时终于实现一套可行方案;
代码:
建表
DROP TABLE IF EXISTS `qs_test`;
CREATE TABLE `qs_test` (
`id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`order_num` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
创建触发器:
触发器主要代码
set new.order_num = concat(date_format(now(),'%y%m%d%i'),(select LPAD(IFNULL(max(id),0)+1,11,0) FROM qs_test))
触发器全部代码
CREATE DEFINER = `root`@`%` TRIGGER `insert_value_add` BEFORE INSERT ON `qs_test` FOR EACH ROW set new.order_num = concat(date_format(now(),'%y%m%d%i'),(select LPAD(IFNULL(max(id),0)+1,11,0) FROM qs_test)) ;
可优化为:
set new.order_num = concat(date_format(now(),'%y%m%d%i'),(select LPAD(IFNULL(LAST_INSERT_ID(),0)+1,11,0)))
mysql使用触发器生成唯一订单号,的更多相关文章
- php生成唯一订单号
		支持更改长度/** * 生成唯一订单号 * */ function build_order_no(){ return date('Ymd').substr(implode(NULL, array_ma ... 
- C#生成唯一订单号
		今天系统出了一个问题,发现生成的订单号存在重复的情况了,这是要命的bug,不马上解决,就会有投诉了 经过改进后的代码我先简单的放一下,后面在慢慢的写清楚整个流程 string key = " ... 
- php生成唯一订单号的方法
		第一种 $danhao = date('Ymd') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT); 第二种 $danhao = date('Ym ... 
- php 生成唯一订单号5种方法
		第一种 private function doCreateOrderNumber($time){ $i=1; $dd = date('Ymd',$time); $aa = 'OH'.$dd; $res ... 
- 全局唯一订单号生成方法(参考snowflake)
		backgroud Snowflake is a network service for generating unique ID numbers at high scale with some si ... 
- php生成唯一id/唯一标识符/唯一订单号
		/** * php 生成唯一id * https://blog.csdn.net/hzqghost/article/details/18914681 */ function guid($factor= ... 
- Java订单号生成,唯一订单号(日均千万级别不重复)
		Java订单号生成,唯一订单号 相信大家都可以搜索到很多的订单的生成方式,不懂的直接百度.. 1.订单号需要具备以下几个特点. 1.1 全站唯一性. 1.2 最好可读性. 1.3 随机性,不能重复,同 ... 
- 支付宝支付集成过程中如何生成商户订单号(out_trade_no)
		out_trade_no是指商户网站唯一订单号,在商户端唯一,每个商户订单号会对应一个支付宝订单号 ,此订单号由珊瑚自己生成,商户订单号要求64个字符以内.可包含字母.数字.下划线:需保证在商户端不重 ... 
- 代码收藏系列--php--生成简短唯一订单号(转载)
		代码收藏系列--php--生成简短唯一订单号 /** * 生成商家交易单号 * <br />特点:不重复 * <br />示例: * <br />普通付款:arra ... 
随机推荐
- linux系统下如何在vscode中调试C++代码
			本篇博客以一个简单的hello world程序,介绍在vscode中调试C++代码的配置过程. 1. 安装编译器 vscode是一个轻量的代码编辑器,并不具备代码编译功能,代码编译需要交给编译器完成. ... 
- tp5 模板参数配置(模板静态文件路径)
			tp5 模板参数配置(模板静态文件路径) // 模板页面使用 <link rel="stylesheet" type="text/css" href=&q ... 
- CentOS7 安装 Python3.6.5
			在centos7下安装python3.6.5 CentOS7编译安装python3.6.8报错zipimport.ZipImportError: can't decompress data; zlib ... 
- AlertDialog用法。
			AlertDialog 可以在当前的界面弹出一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此一般 AlertDialog 都是用于提示一些非常重要的内容或者警告信息 ... 
- 2019 计蒜之道 复赛 B. 个性化评测系统 (模拟,实现,暴搜)
			24.02% 1000ms 262144K "因材施教"的教育方式自古有之,互联网时代,要实现真正意义上的个性化教育,离不开大数据技术的扶持.VIPKID 英语 2020 多万学员 ... 
- jemter简单测试方式
			一.简介 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. **开源,他是一款开源的免费软件,使用它你不需要支付任何费用, * ... 
- 模块打包 webpack
			1.模块打包工具 2.工作方式: 1)将存在依赖关系的模块按照特定规则合并为单个JS文件,一次全部加载进页面中 2)在页面初始时加载一个入口模块,其他模块异步的进行加载 3.优势: 1)支持AMD,C ... 
- 前端之HTML:HTML
			前端基础之html 一.初始html 1.web服务本质 import socket sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) soc ... 
- 花式赋值、列表、字典、解压缩、input()、格式化学习笔记
			目录 花式赋值 列表(list) 字典(dict) 解压缩 input()与用户交互 格式化的三种方式 f_String格式化(important) %s.%d占位符 format 格式化(不常用) ... 
- 使用layui iframe弹层,各弹层之前的传值问题
			最近做一个后台管理系统,用到的layui,主要是使用它的弹层,但是各个弹层之前的传值经常容易搞晕,写个个博客记录一下,方便自己,也方便别人, 首先我的页面已经嵌套了好几个iframe页面了,嵌套了三个 ... 
