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(50NOT 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이 미숙한 모든 분들에게 좋은 팁이 되었으면 좋겠다.

+ Recent posts