2013-04-15 48 views
0

我有两个表股票和订单,我试图让扳机工作,以便在一个订单已被放入订单数量然后从股票数量领域。MYSQL后插入触发器来更改字段值

DELIMITER $$ 
CREATE TRIGGER stock_update 
AFTER INSERT ON order 
FOR EACH ROW 
BEGIN 
SET @quantity = NEW.quantity 
UPDATE stock s; 
SET s.quantity = OLD.quantity - NEW.quantity 
FROM stock s, order o 
WHERE s.ID_stock = o.ID_stock; 
END; 
$$ 
DELIMITER; 

,但我刚开错误编号1064

+2

我认为你必须经过错误的分号'更新股票s' – agim

+0

同意。这个是放错了地方有 –

+0

请,后创建表的语句两个表 – peterm

回答

0

有几个问题:

  1. 顺序是保留字,所以你需要使用反勾周围
  2. 你不需要使用可变@Quantity
  3. 更新声明是错误的
  4. DELIMITER and;应该用空格

分开试试这个

DELIMITER $$ 
CREATE TRIGGER stock_update 
AFTER INSERT ON `order` 
FOR EACH ROW 
BEGIN 
UPDATE stock s 
    SET s.quantity = s.quantity - NEW.quantity 
WHERE s.ID_stock = NEW.ID_stock; 
END $$ 
DELIMITER ; 
+0

感谢peterm的帮助,更改代码完美工作。 – user2282255

0

我不能肯定它会工作,因为我需要为了测试它的表定义。 在每种情况下,您应删除FROM子句和最后一行DELIMITER;。你也应该用分号结束SET @quantity = NEW.quantity这一行。

DELIMITER $$ 
CREATE TRIGGER stock_update 
AFTER INSERT ON order FOR EACH ROW 
BEGIN 
    UPDATE stock s; 
    SET s.quantity = OLD.quantity - NEW.quantity 
    WHERE s.ID_stock = NEW.ID_stock; 
END; 
$$