반응형

 

오라클에서는 시퀀스명.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 사용방법에 대해서 알아보았습니다.

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기