mysql 환경에서 시퀀스 사용하기

시퀀스를 사용하는 방법 중에 auto increment 가 존재하지만 유니크한 값을 사용해야 할 때 애매한 순간이 올 때가 있다.

이를테면 날짜별 주문 번호를 중복되지 않게 사용해야 할 때이다.

이때 오라클과 비슷한 방법으로 시퀀스를 생성하여 사용할 수 있는 방법이 있다.

1. 시퀀스를 관리할 테이블 생성

DELIMITER //
CREATE TABLE `SEQUENCES` (
`NAME` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`CURRVAL` BIGINT(20) UNSIGNED NOT NULL DEFAULT '0',
`UPD_DT` DATETIME NOT NULL DEFAULT NOW()
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB;
DELIMITER;

 
2. 시퀀스 사용을 위한 NEXT_VAL 함수 생성

DELIMITER //
CREATE FUNCTION `NEXT_VAL`(
    `_NAME` TEXT
)
RETURNS BIGINT UNSIGNED
LANGUAGE SQL
DETERMINISTIC
MODIFIES SQL DATA
SQL SECURITY DEFINER
COMMENT ''
BEGIN
    DECLARE RET BIGINT UNSIGNED;
    UPDATE SEQUENCES SET CURRVAL = CURRVAL + 1, UPD_DT = NOW() WHERE NAME = _NAME;
    SELECT CURRVAL INTO RET FROM SEQUENCES WHERE NAME = _NAME LIMIT 1;
    RETURN RET;
END//
DELIMITER;

 
3. 시퀀스 사용하기
SEQUENCES 테이블에 사용할 시퀀스 등록 후
NEXT_VAL 함수 호출
   예) NEXT_VAL('증가시킬 시퀀스')

'mysql' 카테고리의 다른 글

쿼리문 실행 순서  (0) 2022.12.01
mysql function 만들기  (0) 2022.12.01

댓글