功能主要供学习。高并发场景不要使用mysql特性(触发器,存储过程,外键,自定义函数等)使用会降低系统的并发性,数据库升级困难,迁移困难诸多问题。
1.创建生成多个表的序列号的数据维护表
CREATE TABLE `seq_counter` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL COMMENT '计数器名称,在表中是唯一存在的',
`desc` varchar(255) DEFAULT NULL COMMENT '计数器描叙',
`num_length` tinyint(3) unsigned NOT NULL DEFAULT '6' COMMENT '数字长度,不够左侧补0',
`count` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.插入几条初始化数据
INSERT INTO `seq_counter` VALUES (1,'BUSC','商家编号',6,0),(2,'PLAT','订单编号',6,1000);
3.创建函数以生成序列号
CREATE FUNCTION seq(seq_name char (20)) returns int
begin
UPDATE seq_counter SET count=last_insert_id(count+1) WHERE name=seq_name;
RETURN last_insert_id();
end
CREATE FUNCTION seq(seq_name char (20)) RETURNS varchar(255)
begin
UPDATE seq_counter SET count=last_insert_id(count+1) WHERE name=seq_name;
RETURN (select concat(seq_name, LPAD(last_insert_id(),num_length,'0')) from seq_counter where name=seq_name);
end
4.测试
select seq('BUSC');