首先让我们创建序列表
DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
name VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
)ENGINE=InnoDB;
这里--name 代表序列的名字;--current_value 代表当前初始值;--increment 代表自曾幅度,比如说每次自动加一
表创建完成之后
我们向表sequence中添加记录;
name current_value increment
testSeq | 0 | 1
到这里我们的序列表创建完毕,接着创建函数;
在创建函数之前先设置
SET GLOBAL log_bin_trust_function_creators = 1;
在创建函数currval
DELIMITER $$
DROP FUNCTION IF EXISTS `currval` $$
CREATE FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN
DECLARE value int;
set value=0;
SELECT current_value INTO value FROM sequence where name=seq_name;
return value;
END $$
DELIMITER ;
创建函数 nextval
DELIMITER $$
DROP FUNCTION IF EXISTS `nextval` $$
CREATE FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN
UPDATE sequence SET current_value = current_value + increment where name=seq_name ;
RETURN currval(seq_name);
END $$
DELIMITER ;
创建函数 setval
DELIMITER $$
DROP FUNCTION IF EXISTS `setval` $$
CREATE FUNCTION `setval`(seq_name VARCHAR(50), value INTEGER) RETURNS int(11)
BEGIN
UPDATE sequence
SET current_value = value where name=seq_name;
RETURN currval(seq_name);
END $$
DELIMITER ;
创建完毕之后:我们用sql语句 select nextval(‘testSeq’)就会返回 1 了!
select setval('testSeq',10) 返回43
在次select nextval(‘testSeq’)就会返回 44 了!