반응형
오라클에서는 시퀀스명.nextval 이라는 편리한 기능이 존재하지만
MySql은 시퀀스 기능이 별도로 존재하지 않습니다.
조금 번거롭기는 하지만, 그래도 사용 할 방법은 있습니다.
MySql에서 시퀀스 기능을 사용하려면, 다음과 같은 조건과 절차가 요구됩니다.
1. 시퀀스를 사용 할 테이블 생성
2. 시퀀스를 생성 할 프로시저 생성
3. 생성 한 시퀀스의 다음 값을 가져오는 함수 생성
4. 시퀀스를 생성 할 프로시저 실행
5. 최종적으로 nextval 사용
시퀀스의 생성부터 사용까지는 대략 5가지 단계가 필요합니다.
아래는, 그 사용방법에 대한 예시 입니다.
1. 시퀀스를 사용 할 테이블 생성
CREATE TABLE SEQUENCES
(
NAME VARCHAR(32)
, CURRVAL BIGINT UNSIGNED
)
ENGINE = InnoDB
|
시퀀스로 사용 할 테이블이 필요하므로 테이블을 생성합니다.
NAME = 시퀀스명, CURRVAL = 순서
ex) NAME = 'Test', CURRVAL = 1
2. 시퀀스를 생성 할 프로시저 생성
DELIMITER $$
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
|
시퀀스를 생성하는 프로시저 입니다. IN으로 시퀀스명을 받습니다.
이미 생성 되어있는 시퀀스가 있다면, 시퀀스를 지우고 새로 생성합니다.
1개의 Row가 하나의 시퀀스라고 생각하면 되겠습니다.
3. 생성 한 시퀀스의 다음 값을 가져오는 함수 생성
DELIMITER $$
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
|
실제로 nextval의 기능을 수행하는 함수입니다.
오라클과 차이가 있다면 사용 문법에 있습니다.
오라클 : 시퀀스명.nextval
MySql : nextval('시퀀스명')
4. 시퀀스를 생성 할 프로시저 실행
CALL create_sequence('Test');
|
프로시저를 호출해서 Test 라는 이름의 시퀀스를 생성합니다.
Test라는 시퀀스에 0 값이 할당됩니다.
5. 최종적으로 nextval 사용
SELECT nextval('Test') FROM DUAL
|
INSERT문을 사용할 때 nextval 함수를 사용하면 됩니다.
사용 예)
INSERT INTO USER_INFO
(
NUM
, USER_ID
)
VALUES
(
(SELECT nextval('Test') FROM DUAL)
, '아이디'
)
|
이상 MySql에서의 Sequence 사용방법에 대해서 알아보았습니다.
반응형
최근댓글