방법을 찾다가 기껏 찾은(?) faq에 얼통당토 않은 것이 나와서 좌절하고 있다가 내친김에 만들어 봤습니다.
sequence 테이블에 자동증가될 필드를 정의하는 방식입니다.
테이블 필드 또는 테이블 마다 개별로 만들려다가 테이블 정리가 복잡해질지도 모른 다는 생각에서 한쪽으로 밀어넣어버리기로 한겁니다만, 잘한건지는 모르겠네요.
뭐, 구조는 워낙 단순하니 바꾸면 됩니다만...
CREATE TABLE sequence (
key TEXT NOT NULL UNIQUE,
seq INTEGER DEFAULT 1
);
####################################################################################
## Category
####################################################################################
CREATE TABLE category (
seq integer NOT NULL UNIQUE DEFAULT 0,
name TEXT NOT NULL UNIQUE,
PRIMARY KEY (seq, name)
);
INSERT INTO sequence (key) VALUES ('category_seq');
CREATE TRIGGER ia_category AFTER INSERT ON category
FOR EACH ROW BEGIN
UPDATE category SET seq = (SELECT seq FROM sequence WHERE key='category_seq') WHERE name = NEW.name;
UPDATE sequence SET seq = (SELECT max(seq)+1 from category) WHERE key = 'category_seq';
END;
####################################################################################
더 좋은 방법이 없을까요?
트리거에서 nsw.seq = (SELECT max(seq)+1 from category) 방시으로 하려니 안되더군요.
트리거에서 입력되는 값 자체에 대한 편집이 안되는 모양입니다. - 뭐, 영어를 알아야 등을 기대지... 나원...
그럼 이상 허접팁 이었습니다.
인천의 나사 풀린 산호...
|