2011-09-26 75 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-A after insert觸發器邏輯上應該有一個前綴ai,而不是upd
3-您不能在觸發器所在的表中更改after觸發器中的值。因此,如果您(可能)需要更改cartons_added中的值,則需要在before觸發器中執行此操作。另一方面,您不能更改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

我是否需要添加觸發器爲每個表或只一次?我在哪裏放置觸發器? – Erik

+1

@Erik,你需要給每個表添加一個觸發器。只需運行這些命令,MySQL會將觸發器附加到表中,就像MySQL在創建表時將表附加到數據庫一樣。 – Johan

+0

我真的很感謝你的幫助。它很棒!上帝保佑。 – Erik