从另一个表触发条件更新表

时间:2012-01-06 09:34:42

标签: mysql sql triggers

我有两张桌子

MovieStar (
    name: char(15),
    address:varchar(40),
    gender:char(1),
    birthdate: date,
    rating:float
)

StarsIn (
    movieTitle:char(25), 
    movieYear:int, 
    starname:char(15), 
    role:varchar(15)
)

starName是与MovieStar的名称相关的外键。

我希望在插入Starsin记录并且新记录的角色为“主要”时将评分增加1

它会做什么;

on insert to starsin, check whether role = 'main'
if so, what is starname
increment rating of moviestar name = starname

2 个答案:

答案 0 :(得分:4)

我不会在表中存储值rating,因为它可以在需要时从其他表的数据派生。你为什么要用float作为计数?

根据您的条件VIEW创建一个Starsin来计算role = 'main'中的行数,然后您就不需要触发器了,新的计数将始终是最新的添加或删除行。

使用触发器解决方案,您还必须考虑删除行以减少计数。

编辑:根据您的评论,这里是一个示例触发器(虽然语法可能有误,因为我主要使用SQL Server)。我假设name表中的MovieStar字段是主键,因此是唯一的。

CREATE TRIGGER UpdateRating AFTER INSERT ON StarsIn
FOR EACH ROW
BEGIN
    UPDATE MovieStar SET rating =
        (SELECT rating FROM MovieStar WHERE name = NEW.starname) + 1
    FROM MovieStar INNER JOIN NEW ON MoveStar.name = NEW.starname
    WHERE NEW.role = 'main'
END

我不熟悉MySQL,我使用SQL Server,需要根据需要设置触发器。我猜测触发器的FOR EACH ROW部分意味着为插入的每一行执行语句,但我可能错了。

答案 1 :(得分:2)

您需要create a trigger on insert并执行预期的update