仿照网上的进行尝试,请问应该怎么改?
大佬求救救命5555
尝试了一下,不行
再修改之后是这样
还是有问题,显示“在应使用条件的上下文(在 'end' 附近)中指定了非布尔类型的表达式。”
根据你提供的截图,你的 SQL 语句存在语法错误。具体来说,你在 IF 和 ENDIF 之间的语句中使用了类似于 SELECT 或 INSERT 的语句,这是不合法的。仅允许使用条件表达式。
下面是修正后的 SQL 语句:
CREATE TRIGGER `add_c_data` BEFORE INSERT ON `C`
FOR EACH ROW
BEGIN
IF EXISTS (SELECT * FROM `A` WHERE `A`.`id` = NEW.`a_id`)
AND EXISTS (SELECT * FROM `B` WHERE `B`.`id` = NEW.`b_id`)
THEN
INSERT INTO `C_data` (`id`, `c_id`) VALUES (NULL, NEW.`id`);
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Foreign key constraint fails';
END IF;
END;
这个触发器在向 C 表插入数据时,先检查关联的 A 表和 B 表中是否存在相应的记录,如果都存在就在 C_data 表中插入一条新的记录。如果某个关联表中不存在相应的记录,则触发 SQLSTATE '45000' 的异常,表示外键约束失败。