IT/DB
[DB/Mysql] Oracle(오라클) DB의 시퀀스 객체를 Mysql에서도 사용해보기
JSOpg
2019. 1. 21. 16:39
Oracle(오라클) 데이터베이스에서는 기본적으로 sequence 객체를 사용하여, 기본키로 설정하는 경우가 많다.
생성하는 방법도 쉽고, 사용하는 방법도 쉬운 오라클 시퀀스 객체에 비해 mysql은 다소 어려운 감이 있다.
/* 오라클 시퀀스 기본 생성 예 */
create sequence [시퀀스 명];
[시퀀스 명].nextval() -- 1씩 순차적으로 증가함.
오라클 데이터베이스에 익숙해진 상태에서, mysql로 똑같은 기능을 구현하려니 많이 답답했다.
이것저것 검색 해 본 뒤에야, 가장 간단하고 쉽게 구현하는 방법을 찾아냈다.
/* mysql 시퀀스 기본 생성 예 */
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | /* seq_mysql 테이블 생성 */ CREATE TABLE seq_mysql( id INT NOT NULL, seq_name VARCHAR(50) NOT NULL ); /* 생성된 펑션 삭제 */ DROP FUNCTION IF EXISTS get_seq; /* Auto_increment 적용 */ DELIMITER $$ CREATE FUNCTION get_seq (p_seq_name VARCHAR(45)) RETURNS INT READS SQL DATA BEGIN DECLARE RESULT_ID INT; UPDATE seq_mysql 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 ; /* 시퀀스 생성 */ INSERT INTO seq_mysql VALUES (0, 'boardSeq'); /* 시퀀스 삽입 */ get_seq('boardSeq') | cs |
mysql에서는 테이블을 생성하고, 변수 값으로 시퀀스와 같은 기능을 만들 수 있다.
위의 예처럼 순서대로 생성해주면, get_seq('boardSeq') 라는 값을 시퀀스처럼 사용 가능하다.
시퀀스 객체 초기화를 위해, 많은 방법이 있겠지만
나의 경우에는 위에서 "생성된 펑션 삭제" 구문을 실행해주고, 다시 생성해주는 방법을 사용했다.
mysql이 미숙한 모든 분들에게 좋은 팁이 되었으면 좋겠다.