MySQL 에는 시퀀스가 없어 Oracle의 nextval, currval 을 사용할 수 없다.
그렇지만 프로시저와 함수를 통해 시퀀스 기능을 사용할 수 있다.
CREATE TABLE TBL_SEQUENCES (
NAME VARCHAR(32),
CURRVAL BIGINT UNSIGNED
) ENGINE = InnoDB;
/* 구분문자(;->$$로 변경) 프로시저 생성 시 ;이 포함되므로 변경 필요*/
DELIMITER $$
CREATE PROCEDURE `create_seq` (IN seq_name text)
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
DELETE FROM TBL_SEQUENCES WHERE NAME = seq_name;
INSERT INTO TBL_SEQUENCES VALUES(seq_name, 0);
END
$$
CREATE FUNCTION `nextval` (seq_name VARCHAR(32))
RETURNS BIGINT UNSIGNED
MODIFIES SQL DATA
DETERMINISTIC
BEGIN
DECLARE RET BIGINT UNSIGNED;
UPDATE TBL_SEQUENCES SET currval = currval + 1 WHERE NAME = seq_name;
SELECT CURRVAL INTO ret FROM TBL_SEQUENCES WHERE NAME = seq_name;
RETURN ret;
END
$$
DELIMITER ;
CALL create_seq('test_seq');
SELECT nextval('test_seq') FROM DUAL;
아래와 같이 호출 시 마다 +1 된 값이 리턴된다.
