2011-09-26 64 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