gpt4 book ai didi

mysql - MySql中如何使用触发器制作外键

转载 作者:行者123 更新时间:2023-11-29 21:47:19 29 4
gpt4 key购买 nike

我想使用触发器在MySql中创建外键。我有以下表格:1)“内容”表:教师 ID varchar(20)子 ID varchar(20)路径 varchar(100)文件名 varchar(100)

2)“老师”表:教师 ID varchar(20)教师姓名 varchar(45)

我使用以下代码作为触发器(分隔符//):

CREATE TRIGGER fk_content_teacher_temp BEFORE INSERT ON `content`
FOR EACH ROW
BEGIN
DECLARE has_row TINYINT;
SET has_row = 0;
SELECT 1 INTO has_row FROM `teacher` INNER JOIN `content` ON content.teacher_id=teacher.teacher_id;
IF has_row=0 THEN
INSERT error_msg VALUES ('Foreign Key Constraint Violated!');
END IF;
END//

问题是,当我尝试在内容表中插入教师表中不存在的教师 ID 时,出现以下错误:

1172 - 结果包含多行

我该怎么做才能使它正常工作,或者我可以使用触发器来创建外键的任何其他方式?预先感谢您!

最佳答案

虽然尚不清楚“使用触发器创建外键”语句的具体用途,但您当前的问题是 SELECT INTO 不能在返回多个结果的查询中使用。

SELECT 1 INTO has_row FROM Teacher INNER JOIN content ON content.teacher_id=teacher.teacher_id;返回两个表之间的所有匹配项。

如果您尝试检查 teacher 是否包含新 content 记录中使用的 teacher_id 值,您应该能够完全删除 JOIN 子句,然后像这样查询:

SELECT 1 INTO has_row FROM `teacher` WHERE `teacher_id` = NEW.`teacher_id`;

关于mysql - MySql中如何使用触发器制作外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34004118/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com