如何创建触发器以验证另一个表上是否存在记录?

时间:2013-11-30 17:34:43

标签: mysql

我使用的是mysql 5.0版本。

我正在尝试创建一个触发器来检查另一个表中是否存在一个条目(Food的名称)。

我这样做了:

delimiter //
CREATE TRIGGER verifyExists BEFORE INSERT ON Sold
    FOR EACH ROW
    BEGIN
        IF NEW.nameF not in (
            select A.nameF
            From Available D
            where (NEW.nameF = A.nameF and NEW.nameR = A.nameR)
        )
        END IF;
    END;
//
delimiter ; 

这样做不行,为什么?

1 个答案:

答案 0 :(得分:2)

你有几个错误:

delimiter //
CREATE TRIGGER verifyExists BEFORE INSERT ON Sold
    FOR EACH ROW
    BEGIN
        IF NEW.nameF not in (
            select A.nameF
            From Available A  -- CHANGED THE ALIAS TO A
            where (NEW.nameF = A.nameF and NEW.nameR = A.nameR)
        ) THEN -- MISSING THEN
           CALL `Insert not allowed`;

        END IF;
    END;
//
delimiter ; 

sqlfiddle demo

如果你可以使用SIGNAL,这是最好的方法,但由于它只是在mysql 5.5中引入,你必须通过其他途径来实现。一种方法是调用不存在的函数,如上所示。来自this answer