postgresql - 使用触发器 postgresql 更新列值/从插入查询中获取值
问题描述
每当用户对电影进行评分时,都应调用此类触发器并更新已评分电影的评分。如何从查询中获取 movie_id 的值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;
解决方案
假设表“ratings”中的字段称为movie_id:
where r.movie_id = NEW.movie_id
你可以在这里找到详细的解释: https ://www.postgresql.org/docs/current/plpgsql-trigger.html
无论如何,您对这个特定部分感兴趣:
当 PL/pgSQL 函数作为触发器调用时,会在顶层块中自动创建几个特殊变量。他们是:
新的:
数据类型记录;为行级触发器中的 INSERT/UPDATE 操作保存新数据库行的变量。此变量在语句级触发器和 DELETE 操作中为空。
推荐阅读
- gnuplot - Gnuplot - 没有线条的透明曲面图
- jquery - 判断代码中是否使用 jQuery 的方法
- qt - QDebug的operator<<链式输出,包括include表达式,输出意外结果
- java - 如何修复此代码以链接我的微调器以显示使用类填充的数组中的教区名称?
- android - 如何从 SpannableStringBuilder 中删除第一个字符
- python - 形成时间并绘制它
- php - 如何加快 php 页面的加载速度
- php - 从 laravel 中的关系中删除全局范围
- dynamics-crm - 如何仅在 Web 客户端 (CRM9.x) 上从全局导航中隐藏快速表单
- javascript - 从 Sails 端点下载文件