장발의 개발러

[My-SQL] mysql 시퀀스 생성 본문

개발이즈 마이라이프/DB & BigData

[My-SQL] mysql 시퀀스 생성

장발의 개발러 2013. 10. 15. 11:29


참고: http://valley.egloos.com/viewer/?url=http://kamsi76.egloos.com/361479


출처: http://www.cyworld.com/shk87/7452674

mysql은 시퀀스가 따로 없고

테이블 생성시 AUTO_INCREMENT 값을 설정하여 자동증가값으로 사용한다.

 

저렇게 사용할 경우 문제점이 있으니,

 

방금 전 생성된 시퀀스 값을 가져와야 할 경우 어떻게 해결할 지....

 

select하여 max값에 +1 해도 가능하긴하지만,

그럴 경우에 동기화 문제점이 크다.

 

인터넷에서 검색하여 찾아본 결과,

 

프로시저와 함수를 구현하여 사용할 수 있다.

 

시퀀스 테이블 생성

 CREATE TABLE sequences ( name varchar(32), currval BIGINT UNSIGNED ) ENGINE=InnoDB;

 

시퀀스 생성 프로시저

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

 

시퀀스 생성 프로시저 실행

call create_sequence('seq_mem');

 

시퀀스 다음 값 가져오기

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

 

 

실행

 

select nextval('seq_mem') from dual;