2013-02-06 28 views
0

我有一个表warehouse我有我的商店(文章ID为外键和数量)文章的信息。然后,我有另一张表,shoppinglist,我有一个客户端ID,文章ID和数量。比方说,客户想购买3篇文章,但只有一篇文章可用。如何写一个trigger哪些帮助我防止购买太多?MySQL写一个触发器以防止购买太多

我尝试这样做:

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

您在创建触发器时是否出现错误?如果你做'show triggers',它看起来不错吗? – Tom

回答

1

warehouse.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 ; 

注意,我改名了扳机,我在warehouse表猜测article_id列的名称,我使用的触发体内的NEW变量,而不是shoppingList ,并且在DELIMITER ;的分号前需要一个空格,但这可能在发布时出现错字。

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

ERROR 1305: PROCEDURE testing.fail does not exist