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 |