Mysql序列解决方案

## 创建表

CREATE TABLE `t_sequence` (
	`seq_name` VARCHAR(200) NOT NULL COLLATE 'utf8_general_ci',
	`val` BIGINT(20) NOT NULL DEFAULT '0',
	`increment` INT(11) NOT NULL DEFAULT '1',
	`update_time` DATETIME(3) NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
	PRIMARY KEY (`seq_name`) USING BTREE
) ENGINE=InnoDB;

## 创建函数

DROP FUNCTION IF EXISTS f_nextval; 
DELIMITER $ 
CREATE FUNCTION nextval (p_seq_name VARCHAR(50)) 
RETURNS INTEGER
LANGUAGE SQL 
DETERMINISTIC 
CONTAINS SQL 
SQL SECURITY DEFINER 
COMMENT ''
BEGIN

DECLARE i_val INTEGER;

UPDATE t_sequence
SET `val` = LAST_INSERT_ID(`val` + increment) 
WHERE `seq_name` = p_seq_name; 
 
SET i_val = 0; 
SELECT LAST_INSERT_ID() INTO i_val FROM DUAL;

RETURN i_val; 

END
$ 
DELIMITER ;

## 初始化数据

INSERT INTO `t_sequence` (`seq_name`, `val`, `increment`, `update_time`) 
VALUES ('TestSeq', 0, 100, null);

## 使用例子 

mysql> SELECT F_NEXTVAL('TestSeq');
+----------------------+
| F_NEXTVAL('TestSeq') |
+----------------------+
|                  200 |
+----------------------+
1 row in set (0.11 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值