mysql 实现 序列

创建序列表:

CREATE TABLE SEQUENCE ( NAME VARCHAR(50) NOT NULL, CURRENT_VALUE BIGINT NOT NULL, STEP INT NOT NULL DEFAULT 1, PRIMARY KEY (NAME) ) ENGINE=INNODB; 

 

插入序列测试

insert into SEQUENCE values('SEQ_TEST',1,1);

 

添加获取序列当前值函数:

DROP FUNCTION IF EXISTS currval; 
DELIMITER $ 
CREATE FUNCTION currval (seq_name VARCHAR(30)) 
RETURNS INTEGER
LANGUAGE SQL 
DETERMINISTIC 
CONTAINS SQL 
SQL SECURITY DEFINER 
COMMENT ''
BEGIN
DECLARE VALUE INTEGER; 
SET VALUE = 0; 
SELECT CURRENT_VALUE INTO VALUE 
FROM SEQUENCE
WHERE NAME = seq_name; 
RETURN VALUE; 
END
$ 
DELIMITER ;
View Code

 

添加获取序列下一个值函数:

DROP FUNCTION IF EXISTS nextval; 
DELIMITER $ 
CREATE FUNCTION nextval (seq_name VARCHAR(50)) 
RETURNS INTEGER
LANGUAGE SQL 
DETERMINISTIC 
CONTAINS SQL 
SQL SECURITY DEFINER 
COMMENT ''
BEGIN
UPDATE SEQUENCE
SET CURRENT_VALUE = CURRENT_VALUE + STEP 
WHERE NAME = seq_name; 
RETURN currval(seq_name); 
END
$ 
DELIMITER ;
View Code

测试:


SELECT currval('SEQ_TEST');
SELECT nextval('SEQ_TEST');

 

注意:添加函数 可能出现 函数重复的提示,可能是mysql高版本、阿里云云数据库RDS 增加了currval、nextval 自带函数。函数名可更换为:curr_val、next_val 

posted @ 2020-02-19 11:49  旧梦痕丶  阅读(483)  评论(0)    收藏  举报