使用触发器 postgresql 更新列值/从插入查询中获取值
Update column value with trigger postgresql/ fetch value from insert query
每当用户对电影进行评分时,都应调用此类触发器并更新已评分电影的评分。
如何从查询 insert into ratings values (movie_id, /*etc*/)
?
中获取 movie_id 的值
create trigger new_rating after insert on ratings
execute procedure update_movie_rating();
create or replace function update_movie_rating()
returns trigger
as $new_rating$
begin
update movies
set averagerating =
select avg(r.rating)
from ratings r
where r.movie_id = /*movieid fetched from insert query*/
return new;
end;
$new_rating$ language plpgsql;
假设 table“评分”中的字段称为 movie_id:
where r.movie_id = NEW.movie_id
你可以在这里找到详细的解释:
https://www.postgresql.org/docs/current/plpgsql-trigger.html
无论如何,您对这个特定部分感兴趣:
When a PL/pgSQL function is called as a trigger, several special
variables are created automatically in the top-level block. They are:
NEW:
Data type RECORD; variable holding the new database row for
INSERT/UPDATE operations in row-level triggers. This variable is null
in statement-level triggers and for DELETE operations.
每当用户对电影进行评分时,都应调用此类触发器并更新已评分电影的评分。
如何从查询 insert into ratings values (movie_id, /*etc*/)
?
create trigger new_rating after insert on ratings
execute procedure update_movie_rating();
create or replace function update_movie_rating()
returns trigger
as $new_rating$
begin
update movies
set averagerating =
select avg(r.rating)
from ratings r
where r.movie_id = /*movieid fetched from insert query*/
return new;
end;
$new_rating$ language plpgsql;
假设 table“评分”中的字段称为 movie_id:
where r.movie_id = NEW.movie_id
你可以在这里找到详细的解释: https://www.postgresql.org/docs/current/plpgsql-trigger.html
无论如何,您对这个特定部分感兴趣:
When a PL/pgSQL function is called as a trigger, several special variables are created automatically in the top-level block. They are:
NEW:
Data type RECORD; variable holding the new database row for INSERT/UPDATE operations in row-level triggers. This variable is null in statement-level triggers and for DELETE operations.