码迷,mamicode.com
首页 > 数据库 > 详细

mysql使用触发器生成唯一订单号,

时间:2019-12-10 12:54:24      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:def   rem   实现   new   最大值   from   now()   rom   weight   

需求:订单号唯一,并且期望是时间格式加其他字符串,

实现:采用触发机制,在新增时根据新增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)) ;

 

 

 

 

 

mysql使用触发器生成唯一订单号,

标签:def   rem   实现   new   最大值   from   now()   rom   weight   

原文地址:https://www.cnblogs.com/hardykay/p/12015758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!