天天看点

MySQL创建自增序列(Sequence)

MySQL创建自增序列(Sequence)

点关注不迷路,欢迎再访!	
           

精简博客内容,尽量已行业术语来分享。

努力做到对每一位认可自己的读者负责。

帮助别人的同时更是丰富自己的良机。

目录

    • MySQL创建自增序列(Sequence)
      • 一.创建--Sequence 管理表
      • 二.创建--取当前值的函数
      • 三.创建--取下一个值的函数
      • 四.创建--更新当前值的函数
      • 五.测试函数功能

MySQL不支持直接的sequence,所以需要创建一张table来模拟sequence的功能

一.创建–Sequence 管理表

CREATE TABLE UUser_sequence ( 
     name VARCHAR(50) NOT NULL, 
     current_value INT NOT NULL, 
     increment INT NOT NULL DEFAULT 1, 
     PRIMARY KEY (name) 
) ;
           

二.创建–取当前值的函数

DROP FUNCTION IF EXISTS currval; 
DELIMITER $ 
CREATE FUNCTION currval (seq_name VARCHAR(50)) 
     RETURNS INTEGER
     LANGUAGE SQL 
     DETERMINISTIC 
     CONTAINS SQL 
     SQL SECURITY DEFINER 
     COMMENT ''
BEGIN
     DECLARE value INTEGER; 
     SET value = 0; 
     SELECT current_value INTO value 
          FROM UUser_sequence
          WHERE name = seq_name; 
     RETURN value; 
END
$ 
DELIMITER ; 
           

三.创建–取下一个值的函数

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 UUser_sequence
          SET current_value = current_value + increment 
          WHERE name = seq_name; 
     RETURN currval(seq_name); 
END
$ 
DELIMITER ; 
           

四.创建–更新当前值的函数

DROP FUNCTION IF EXISTS setval; 
DELIMITER $ 
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER) 
     RETURNS INTEGER
     LANGUAGE SQL 
     DETERMINISTIC 
     CONTAINS SQL 
     SQL SECURITY DEFINER 
     COMMENT ''
BEGIN
     UPDATE UUser_sequence
          SET current_value = value 
          WHERE name = seq_name; 
     RETURN currval(seq_name); 
END
$ 
DELIMITER ; 
           

五.测试函数功能

--添加一个sequence名称和初始值,以及自增幅度
INSERT INTO UUser_sequence VALUES ('GROUP_USER_SEQ', 100, 1);
--查询指定sequence的下一个值
SELECT NEXTVAL('GROUP_USER_SEQ');
           

继续阅读