웹마스터 팁

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를 직접 건드리지 않는 것이 좋습니다. 잘못하면 데이터 다 날아갑니다.