시퀀스를 사용하는 방법 중에 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 |
댓글