본문 바로가기

Technique/Database

[MySQL] Sequence 생성

반응형

0. 들어가기 전에


MySQL의 경우 오라클처럼 시퀀스라는게 존재하지 않습니다. 따라서 여러 테이블을 관리하는 키값을 두기 난해하고 그것을 해결하는 방법으로 새로운 테이블을 하나 생성하여 그 테이블로 하여금 시퀀스의 역할을 하게 했습니다.


1. 테이블 생성


시퀀스를 담고 관리할 테이블을 하나 생성합니다. 컬럼은 시퀀스 값이 담길 곳과 그 시퀀스의 이름이 될곳으로 2칸이 필요하게 됩니다.

저는 테이블의 이름은 master_seq, 컬럼은 id와 seq_name으로 해두겠습니다.

 CREATE TABLE master_seq(

     id int not null, 

     seq_name varchar(50) not null

 )




2. 함수 제작


이제 이 테이블을 이용하게끔 만들기 위한 함수를 제작합니다. 

이 함수를 호출하면 자동적으로 +1이 된 값을 가져오게 합니다. 


DROP FUNCTION IF EXISTS get_seq;  //혹시 잘 못 만들어서 있다면 삭제합니다.

DELIMITER $$


CREATE FUNCTION get_seq (p_seq_name VARCHAR(45))

RETURNS INT READS SQL DATA

BEGIN

DECLARE RESULT_ID INT;

UPDATE master_seq SET id = LAST_INSERT_ID(id+1) 

 WHERE seq_name = p_seq_name;

SET RESULT_ID = (SELECT LAST_INSERT_ID());

RETURN RESULT_ID;

END $$

DELIMITER ;



3. 시퀀스 생성


시퀀스로 쓸 데이터를 생성합니다. 저는 파일 관리를 하려다가 만들어서 file 이라는 이름을 줘서 해보겠습니다. 시작수치는 1로 두었습니다.


 INSERT INTO master_seq

 VALUES (1, 'file')



4. 호출


이제 아래와 같이 쿼리를 날리면 하나씩 증가된 값을 시퀀스처럼 가져 올 수 있습니다.


 SELECT get_seq('file')




----------------------------------------출처--------------------------------------------------------

https://code-examples.net/ko/q/32644c

----------------------------------------------------------------------------------------------------

반응형

'Technique > Database' 카테고리의 다른 글

[ORACLE] Dual  (0) 2020.05.04
MySQL SHOW 명령모음  (0) 2019.03.08
[ORACLE] 사용자 권한 확인, 수정, 삭제  (0) 2019.02.14
InnoDB의 새로운 파일 포맷 "Barracuda"  (0) 2019.01.30