2011-12-14 4 views
0

동일한 테이블에 라인을 삽입 할 때마다 할인 라인을 테이블에 삽입해야합니다. 이제는 이것이 끝없는 루프에서 끝날 수 있지만 할인 행을 삽입 할 때 아무 것도 삽입하지 않도록 수표를 넣었 음을 알고 있습니다.동일한 테이블 트리거에 삽입 mysql

MySQL의 나던도이 테이블에 삽입 this.It 나던 트리거

이 작업을 수행하는 방법에 대한 제안 떨어져 혼자 불을 할 수 있도록하는 것?

답변

2

INSERT 코드를 이와 같이 변경하면 어떨까요? :

INSERT INTO table1 (field1, field2, ...) 
VALUES (@item, @price, ....) 
    , (@item, @discount, ...) ; 

또 다른 한가지는 재평가 데이터 구조에 될 것입니다. 지금은 귀하가 제공 한 정보가 제한되어 있기 때문에 표준화되지 않았습니다. 테이블에 두 가지 유형의 정보를 저장합니다.

아마도 테이블에 몇 개의 열을 추가하여 (매번 삽입 될) 두 행을 하나로 결합 할 수 있습니다.

또는 테이블을 두 개의 테이블로 나누어서 하나는 "정상"항목 행을위한 것이고 다른 하나는 할인 항목을위한 것입니다.

+0

그래, 나는이 길을 가야 할 것 같아. – Jed

+0

@Jed : 업데이트를 참조하십시오. –

2

MySQL에서는 허용되지 않습니다.

한 가지 해결책은 테이블에 트리거를 두 번 삽입하는 것입니다. 그런 다음 쓰기 테이블에 대한 쓰기 및 갱신을 수행하고 트리거 관리 읽기 테이블에서 읽습니다.

4

해당 테이블에 연결된 트리거에서 현재 행 이외의 다른 테이블을 변경할 수 없습니다.

하나의 해결책은 다른 테이블에 삽입하고 당신은 당신이없는 blackhole 저장에 대해 걱정할 다른 테이블을하면 그 트리거가 관심있는.

테이블에 두 행을 삽입하는 것입니다.

DELIMITER $$ 

CREATE TRIGGER ai_bh_test_each AFTER INSERT ON bh_test FOR EACH ROW 
BEGIN 
    INSERT INTO table1 (field1, field2, ...) VALUES (new.field1, new.field2, ....); 
    INSERT INTO table1 ... values for the second row 
END $$ 

DELIMITER ; 
+0

네,이 솔루션을 보았지만 다른 사람이 중첩 트리거 규칙을 조정할 수있는 방법이 있기를 바랬습니다 – Jed

+1

@Jed, 미안하지만 그건 불가능합니다. 다른 데이터베이스는 트리거에 동일한 제한이 있습니다. 트리거는 트리거에 연결된 테이블에서 직접 또는 간접 변경을 허용 할 수 없으며, 그렇지 않으면 무한 루프가 발생할 수 있습니다. 그래서 table1에 대한 트리거를 table2에, table2의 트리거에 대한 table1의 영향을 허용하더라도 MySQL은이를 거절합니다. 중첩이 도움이되지 않습니다. _ (나는 그것을 위해 아주 행복하다) _ – Johan

관련 문제