我是 mysql 新手,正在为评估的项目创建数据库。作为其中的一部分,我需要创建一个触发器并演示它是如何工作的。
数据库中的学校属于一个称为集群的组(cluster_no:1、2、3或4)并参加会议(1-6)。有一个名为“集群”的表,其中包含有关谁运行集群会议、举行会议以及出席登记是否已完成的信息。 “集群出席记录”表包含会议的出席登记。
会话 1-3 的记录在“集群出勤记录”中已完成,并且我创建了触发器,以便在为未来会话更新“集群出勤记录”时向表“集群”添加语句。我们的想法是,在集群会议结束后,我会知道谁参加了会议,并且可以在“集群出勤记录”中更新每所学校的记录。这些是布尔值,对于会话 4-6 设置为 0,因为我有一个计算出勤率的视图,该视图不适用于 NULL。
我必须进行设置,以便每个会话(会话 4-6)的每个 cluster_no 有一个不同的触发器,但是当我更新 cluster_no 1、session_4 的记录时,“clusters”表中没有任何变化我正在期待。任何帮助找出原因的帮助都将不胜感激。
更新代码(似乎没有做任何事情,可能是我的问题)
UPDATE cluster_attendance_record SET session_4 = 1 WHERE cluster_no = 1 AND school_id = 'S01' AND school_id ='S02' AND school_id = 'S03' AND school_id ='S05';
触发器代码(不确定这里是否有问题,但我认为它应该有效)
DELIMITER //
CREATE TRIGGER c1_s4_register_status
AFTER UPDATE
ON cluster_attendance_record
FOR EACH ROW IF cluster_no = 1
THEN
UPDATE clusters SET session_4 = 'REGISTER COMPLETE'
WHERE cluster_no = 1;
END IF;
//
DELIMITER ;
当你说
IF cluster_no = 1
您只需要澄清它是您在触发器定义中引用的新的、更新的值。
你可以这样做:
FOR EACH ROW IF NEW.cluster_no = 1
完整的工作示例:
create table cluster_attendance_record (cluster_no int);
create table clusters (cluster_no integer, session_4 varchar(30));
DELIMITER //
CREATE TRIGGER c1_s4_register_status
AFTER UPDATE
ON cluster_attendance_record
FOR EACH ROW IF NEW.cluster_no = 1
THEN
UPDATE clusters SET session_4 = 'REGISTER COMPLETE'
WHERE cluster_no = 1;
END IF;
//
DELIMITER ;
insert into cluster_attendance_record (cluster_no)
select 0;
insert into clusters (cluster_no, session_4)
select 1, "some_value";
update cluster_attendance_record set cluster_no = 1;
select * from cluster_attendance_record;
select * from clusters;