2011-09-26 3 views
0

이 트리거는 세 개의 테이블을 사용하여 작동하게 만들 필요가 있습니다. 누구든지 문제가 있습니까?트리거와 함께 도움이 필요하십니까 php/mySQL

'수량'은 항상 추가 및 가져 오기에서 최신 수량을 표시해야합니다.

CREATE TRIGGER Upd_Cartons_Qty 
AFTER INSERT ON cartons_added FOR EACH ROW 
BEGIN 
UPDATE cartons_current SET qty = qty + NEW.add_qty WHERE part_no = NEW.part_no; 
END; 



TABLE NAME: cartons_current 
+--------------+--------------+-------+-------+ 
| Column  | Type   | Null | Key | 
+--------------+--------------+-------+-------+ 
| part_no  | varchar(20) | No | Prim | 
| qty   | int(8)  | No |  | 
+--------------+--------------+-------+-------+ 

TABLE NAME: cartons-added 
+--------------+--------------+-------+-------+ 
| Column  | Type  | Null | Key | 
+--------------+--------------+-------+-------+ 
| part_no  | varchar(20) | No | Prim | 
| add_qty  | int(8)  | No |  | 
+--------------+--------------+-------+-------+ 

TABLE NAME: cartons_pulled 
+--------------+--------------+-------+-------+ 
| Column  | Type   | Null | Key | 
+--------------+--------------+-------+-------+ 
| part_no  | varchar(20) | No | Prim | 
| pull_qty  | int(8)  | No |  | 
+--------------+--------------+-------+-------+ 

답변

0

1 당신은 end에 대한 최종 구분 기호로 ;을 사용할 수 없습니다. 트리거 전에 구분 기호를 설정해야합니다.
2- after insert 트리거는 논리적으로 접두어 ai이 아니고 upd이 아니어야합니다.
3- 트리거가있는 동일한 테이블에서 after 트리거의 값을 변경할 수 없습니다. 따라서 cartons_added에서 값을 변경해야하는 경우 before 트리거에서 수행해야합니다.
4- before 트리거에서 다른 테이블의 값을 변경할 수 없습니다. 이러한 변경 사항은 롤백 될 수 있으므로 테이블이 일정하지 않으므로 after 트리거에서 발생해야합니다.
5 트리거에서 여러 테이블을 적용 할 수 있습니다. 예제와 동일하게 수행 할 수 있습니다. 당신이 트리거에서 일부 값을 변경하려는 경우

DELIMITER $$ 

CREATE TRIGGER ai_Cartons_Qty AFTER INSERT ON cartons_added FOR EACH ROW 
BEGIN 
    UPDATE cartons_current SET qty = qty + NEW.add_qty WHERE part_no = NEW.part_no; 
    UPDATE cartons_pulled SET x1 = x1 + NEW.add_qty WHERE part_no = NEW.part_no; 
END$$ 

DELIMITER ; 

자신의 표는 아래 대신 같은 update, 사용 코드를 사용하지 마십시오

DELIMITER $$ 

CREATE TRIGGER ai_Cartons_Qty BEFORE INSERT ON cartons_added FOR EACH ROW 
BEGIN 
    -- Update cartons_added .... will not work. 
    -- Use SET NEW.fieldname instead. 
    IF NEW.qty_added = 0 THEN 
    SET NEW.qty_added = 1; 
    END IF; 
END$$ 

DELIMITER ; 
+1

가 수행 I 각 테이블이나 단지에 대한 트리거를 추가해야 한 번? 어디서 방아쇠를 당길 수 있습니까? – Erik

+1

@Erik, 각 테이블에 트리거를 추가해야합니다. 그냥 명령을 실행하면 MySQL은'create table'을 할 때 MySQL이 테이블에 DB를 붙이는 것처럼 테이블에 트리거를 붙일 것입니다. – Johan

+0

정말 고맙습니다. 그것은 위대한 작품! 신의 축복. – Erik

관련 문제