2010-03-08 5 views
2

sqlite의 복합 키가 자동 증가를 허용하지 않는 문제를 해결하려고합니다.자동 증가에 트리거 사용

전혀 사용할 수 있는지 모르겠지만 마지막으로 사용한 ID를 다른 테이블에 저장하려고했는데 새 reccord를 삽입 할 때 트리거를 사용하여 다음 ID를 할당하려고했습니다.

단일 pk가 고유하지 않기 때문에 (데이터베이스 병합으로 인해) 합성 키를 사용해야합니다.

CREATE TRIGGER pk BEFORE INSERT ON product_order 
BEGIN 
    UPDATE auto_increment SET value = value + 1 WHERE `table_name` = "product_order"; 
END 

이 성공적으로 값을 업데이트 : 내가 행의 필드를 설정하는 방법

삽입 다른 테이블

지금까지되는 쿼리에 값을 기준으로한다. 하지만 이제는 새 레코드에 새 값을 할당해야합니다. (new.id).

답변

5

AFTER INSERT 트리거를 사용하는 경우 다음 예제와 같이 새로 삽입 된 행을 업데이트 할 수 있습니다.

CREATE TABLE auto_increment (value INT, table_name TEXT); 
INSERT INTO auto_increment VALUES (0, 'product_order'); 

CREATE TABLE product_order (ID1 INT, ID2 INT, name TEXT); 

CREATE TRIGGER pk AFTER INSERT ON product_order 
BEGIN 

    UPDATE auto_increment 
    SET  value = value + 1 
    WHERE table_name = 'product_order'; 

    UPDATE product_order 
    SET  ID2 = (
       SELECT value 
       FROM auto_increment 
       WHERE table_name = 'product_order') 
    WHERE ROWID = new.ROWID; 
END; 

INSERT INTO product_order VALUES (1, NULL, 'a'); 
INSERT INTO product_order VALUES (2, NULL, 'b'); 
INSERT INTO product_order VALUES (3, NULL, 'c'); 
INSERT INTO product_order VALUES (4, NULL, 'd'); 

SELECT * FROM product_order; 
+0

감사합니다. – Ikke

관련 문제