웹마스터 팁
DB에서 직접 시퀀스 생성하기
2015.07.18 22:35
XE는 모듈, 문서, 댓글, 회원 등 모든 것에 고유번호(srl)를 부여합니다.
그런데 이게 테이블마다 별도로 auto_increment되는 것이 아니라 사이트 전체에서 유일한 번호이기 때문에
XE 내에서 작업하지 않고 DB에서 직접 작업해야 할 때는 상당히 귀찮습니다.
잘못 건드리면 시퀀스 값이 중복되어서 난리나고요 ㅠㅠ
MySQL 5.x에서는 아래와 같은 프로시저를 생성하여 시퀀스 작업을 단순화할 수 있습니다.
DELIMITER //
DROP FUNCTION IF EXISTS xe_next_sequence //
CREATE FUNCTION xe_next_sequence() RETURNS BIGINT
BEGIN
DECLARE next_sequence BIGINT;
INSERT INTO xe_sequence (seq) VALUES (0);
SELECT LAST_INSERT_ID() INTO next_sequence;
IF (next_sequence % 10000 = 0) THEN
DELETE FROM xe_sequence WHERE seq < next_sequence;
END IF;
RETURN next_sequence;
END //
DELIMITER ;
이렇게 해두면 어디서든 시퀀스 값이 필요할 때
SELECT xe_next_sequence();
이렇게 간단한 쿼리 한 번으로 다음 시퀀스 값을 뽑아낼 수 있게 됩니다.
또한 다른 쿼리를 작성할 때도
INSERT INTO xe_table_name VALUES (xe_next_sequence(), 'foo', 'bar', ... );
이렇게 활용이 가능합니다.
※ 꼭 필요한 경우가 아니면 DB를 직접 건드리지 않는 것이 좋습니다. 잘못하면 데이터 다 날아갑니다.
댓글 3
-
썰레발리오
2015.07.22 01:30
-
뉴질맨
2015.08.07 05:56
직접 Table에 자료를 넣으려고 하다가 sequence 문제를 해결해지 못해 API로 Test하고 있습니다.
일반 게시판 자료(제목과 내용)는 잘 들어가는데
사용자정의 (document_extra_keys 와 _vars 컬럼) 때문에 고전 중입니다.
알려주신 팁은 저에게는 햇빛과 같습니다. 감사합니다.
문의사항은,,
위 프로시져를 DB에 한번 실행하면 되는 것인가요?
아니면 DB Open 때마다 실행해줘야 하는 것인지요.
감사합니다.
-
기진곰
2015.08.07 09:04
프로시저는 한 번만 생성해 주면 됩니다.
단, MySQL 5.0 이하 버전에서는 지원되지 않습니다.
제목 | 글쓴이 | 날짜 |
---|---|---|
[SocialXE] 1.7.4.x 업데이트 후 SocialXE에서 '잘못된 요청입니다.' 오류가 뜨는 문제 해결하기 [15] | TUW | 2014.03.26 |
SocialXE 관련 사용팁 적용 수정 파일 [3] | 휘즈 | 2014.07.13 |
[업데이트] [Easy Tip] [XE 1.7] XE 코어 js, css파일 jsdelivr CDN사용하기 [13] | Typhoon | 2014.08.28 |
socialXE 에서 로그인시 소셜로그인과 XE 로그인 동시 구현하기 | 큐우우 | 2014.08.31 |
DB에서 직접 시퀀스 생성하기 [3] | 기진곰 | 2015.07.18 |
[XE수정] '새버전을 업데이트...'이 부분이 눈에 거슬리면... [1] | 브레인630 | 2015.08.11 |
이거 좋네요. 추천!