簡體   English   中英

根據另一個表的條件更新表觸發器

[英]Update table on condition from another table Trigger

我有兩個桌子

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

我不會將價值rating存儲在您的表中,因為它可以在需要時從其他表的數據派生。 為什么要使用float進行計數?

創建一個VIEW ,根據您的條件role = 'main'Starsin的行進行Starsin ,然后就不需要觸發器,並且在添加或刪除新行時該計數始終是最新的。

使用觸發器解決方案,您還必須考慮行刪除以減少計數。

編輯:根據您的評論,這是一個示例觸發器(盡管語法可能是錯誤的,因為我主要使用SQL Server。) 我假設MovieStar表中的name字段是主鍵,因此是唯一的。

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部分意味着對插入的每一行都執行了該語句,但是我對此可能是錯的。

您需要create a trigger on insertcreate a trigger on insert並執行預期的update

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM