본문 바로가기

Study/SQL

[MySQL] 시퀀스 생성하는 방법

# 시퀀스를 생성할 테이블
CREATE TABLE SEQUENCES(
    NAME VARCHAR(32),
    CURRVAL BIGINT UNSIGNED
)ENGINE=InnoDB;

# 시퀀스를 생성하는 프로시저
CREATE PROCEDURE CREATE_SEQUENCE(IN the_name text)
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
    DELETE FROM SEQUENCES WHERE name=the_name;
    INSERT INTO SEQUENCES VALUES (the_name, 0);
END;

# NEXTVAL 함수 생성
CREATE FUNCTION NEXTVAL(the_name VARCHAR(32))
    RETURNS BIGINT UNSIGNED
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
    DECLARE ret BIGINT UNSIGNED;
    UPDATE SEQUENCES SET currval=currval+1 WHERE name=the_name;
    SELECT CURRVAL INTO ret FROM SEQUENCES WHERE name=the_name limit 1;
    RETURN ret;
END;

# 시퀀스명 입력 및 초기값 지정하기(초기값+1부터 보임)
INSERT INTO SEQUENCES
VALUES('SEQ_TEST', 0);

# -- nextval 값 가져오기(확인용)
SELECT NEXTVAL('SEQ_TEST') SEQ
FROM dual;