触发器无法触发 - 请需要帮助

问题描述 投票:0回答:1

我是 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 ;
mysql triggers sql-update
1个回答
0
投票

当你说

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;
© www.soinside.com 2019 - 2024. All rights reserved.