일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 명주
- TortoiseSVN
- 설치
- 차이점
- 라곰
- 스포티지r 풀체인지
- 책상
- lagom framework
- 정통춘천닭갈비
- 한강 #야경 #한강야경
- 라곰프레임워크
- CVS
- Lambda Expressions
- 폴-안티스파이앱
- 폴안티스파이앱
- 모니터
- 스파이앱
- volatile
- windows vista
- 썬
- Subversion
- svn
- 폴안티
- java8 람다식
- 윈도우즈 비스타
- 폴-안티
- lagom
- 폴-안티 스파이앱
- selenium #scraping #webscraping #jsoup #firefox
- 폴안티 스파이앱
- Today
- Total
장발의 개발러
[My-SQL] mysql 시퀀스 생성 본문
참고: 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;