//2023-11-11 22:39
数据库实验八第八题记录
在老师讲过但好像又没讲的情况下,我终于创建了人生中第一个触发器
首先,我本来觉得里面我感到最模糊的是NEW和OLD,后来我看到这个👇
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44833403/article/details/131563079
让我知道NEW不是添加或修改后的表,而是添加或修改的元组
下面是步骤
第一步:创建grade_log表,记录修改操作
create table grade_log(
stu_id varchar(15),
cour_id varchar(5),
old_grade varchar(10),
new_grade varchar(10),
user_name varchar(10),
oper_date date
);
第二部:创建触发器
create or replace function update_grade_log() returns trigger as $$
DECLARE
log_stu_id varchar(10);
log_cour_id varchar(5);
log_old_grade varchar(10);
log_new_grade varchar(10);
log_user_name varchar(10);
log_oper_date date;
begin
log_stu_id :=NEW.stu_id;
log_cour_id :=NEW.cour_id;
log_old_grade :=OLD.grade;
log_new_grade :=NEW.grade;
select stu_name
into log_user_name
from student
where stu_id=NEW.stu_id;
log_oper_date :=NOW();
insert
into grade_log
values(log_stu_id,log_cour_id,log_old_grade,log_new_grade,log_user_name,log_oper_date);
return NEW;
end;$$ language plpgsql;
create trigger tri_uodate_grade_log after update of grade on takes
for each row
execute procedure update_grade_log();
DECLARE在begain-end外定义变量
在begin-end里给变量赋值 变量名 :=value postgre格式是这样的
第三步:进行验证,对takes的grade属性修改
update takes
set grade=70
where stu_id='8819';
然后看grade_log是否记录(插入)修改数据,结果记录了八条数据😄