MySQL写了一个触发器,以防止购买太多

时间:2013-02-06 20:59:40

标签: mysql triggers

我有一张表warehouse,其中我有关于商店中文章的信息(文章ID为外键和数量)。然后,我有另一张表shoppinglist,其中我有客户ID,文章ID和数量。可以说,客户希望购买3篇文章,但只有一篇文章可用。如何写一个trigger来帮助我防止购买太多?

我试过了:

DELIMITER $$ CREATE TRIGGER check BEFORE INSERT ON shoppinglist FOR EACH ROW BEGIN IF warehouse.quantity < shoppinglist.quantity THEN CALL fail('You cant buy that much'); END IF; END $$ DELIMITER;

但这似乎不起作用。我的意思是,当我这样做时:

INSERT INTO shoppinlist (clients_id, article_id, quantity) VALUES (1, 2, 100);

仓库中只有2件id = 2的物品,这是可能的。我做错了什么?

1 个答案:

答案 0 :(得分:1)

仓库中有什么具体的文章.quantity或shoppingList.quantity在你的代码中引用? 此外,check是保留关键字。

试试这个:

DELIMITER $$
CREATE TRIGGER qtyCheck BEFORE INSERT ON shoppinglist 
FOR EACH ROW 
BEGIN 
  SET @qty = (SELECT quantity FROM warehouse WHERE article_id = NEW.article_id);
  IF @qty < NEW.quantity THEN
    CALL fail('You cant buy that much'); 
  END IF; 
END $$ 
DELIMITER ;

请注意,我重命名了触发器,我猜测article_id表上warehouse列的名称,我使用的是NEW变量而不是shoppingList触发器的主体,DELIMITER ;中的分号前需要一个空格,虽然这可能是发布时的拼写错误。

最后,如果未定义fail函数,则可能会出现以下错误。它在我的系统中不存在......

ERROR 1305: PROCEDURE testing.fail does not exist