如何编写触发器来更新另一个表中的属性

时间:2018-03-23 22:57:45

标签: mysql sql triggers

我有以下关系:

Restaurant(rname, address, phone, stars)

Chef(cname, specialdish, rating)

CooksFor(cname, rname, salary)

我的任务是编写一个触发器,使每位厨师的salary增加10%,因为他们做饭的餐厅的星级数量会增加。

以下是我写的内容,基于我在课堂上的笔记和我在网上找到的一些例子:

CREATE TRIGGER salary_increase BEFORE UPDATE ON Restaurant
    FOR EACH ROW
    BEGIN
        IF NEW.stars > stars
        THEN UPDATE Chef
            SET salary = 1.1*salary
            WHERE EXISTS (SELECT C.cname FROM Chef C, CooksFor CF
                         WHERE C.cname = CF.cname AND
                         CF.rname = Restaurant.rname)
        END IF
    END

这会有用吗?有更好/更正确的方法吗?

我试图在网上找到一个类似问题的例子,但发现大多数人只需要引用另一个表。既然我可以通过使用CooksFor表找到哪家厨师为哪家餐馆做饭的唯一方法,那么在尝试解决这个问题时我会感到有些困惑。

谢谢!

1 个答案:

答案 0 :(得分:1)

您的触发逻辑看似合理,我会考虑将INNER JOIN用于UPDATE

    UPDATE C
    SET C.salary = 1.1*C.salary
    FROM Chef C   
    INNER JOIN CooksFor CF
    ON CF.cname = C.cname
    AND CF.rname = NEW.rname