사용 DBMS 버전 : 10.0.31-MariaDB

  1. 시퀀스 값들을 저장할 테이블을 생성한다.
CREATE TABLE TB_SEQUENCES ( name varchar(32), currval BIGINT UNSIGNED ) ENGINE=InnoDB;

  1. 시퀀스의 키값을 만드는 프로시져를 생성한다.
DELIMITER $$
CREATE PROCEDURE `create_sequence`(IN the_name text)
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
    DELETE FROM TB_SEQUENCES WHERE name=the_name;
    INSERT INTO TB_SEQUENCES VALUES (the_name, 0);
END

  1. 시퀀스의 키값을 지우는 프로시져를 생성한다.
DELIMITER $$
CREATE PROCEDURE `drop_sequence` (IN the_name text)
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
    DELETE FROM TB_SEQUENCES WHERE name=the_name;
END

  1. 특정 키값의 현재값을 가져오는 프로시져를 생성한다.
DELIMITER $$
CREATE FUNCTION `currval` (the_name varchar(32))
RETURNS BIGINT UNSIGNED
READS SQL DATA
DETERMINISTIC
BEGIN
    DECLARE ret BIGINT UNSIGNED;
    SELECT currval INTO ret FROM TB_SEQUENCES WHERE name=the_name limit 1;
    RETURN ret;
END

  1. 특정 키값의 다음값을 가져오는 프로시져를 생성한다.
DELIMITER $$
CREATE FUNCTION `nextval`(the_name varchar(32))
RETURNS BIGINT UNSIGNED
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
    DECLARE ret BIGINT UNSIGNED;
    UPDATE TB_SEQUENCES SET currval=currval+1 WHERE name=the_name;
    SELECT currval INTO ret FROM TB_SEQUENCES WHERE name=the_name limit 1;
    RETURN ret;
END



1 2 3 4