我有一张表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的物品,这是可能的。我做错了什么?
答案 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