我有两张桌子
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
答案 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
。