MySQL之前删除触发器双连接和条件
你好,同事。MySQL之前删除触发器双连接和条件
我有样的一个问题试图删除触发器有多个连接和条件之前实施。
我有用户表,组和连接表,使它成为许多。
触发的感觉是允许删除没有学生的组,并禁止其他人。
我对现在的代码是:
DELIMITER // CREATE TRIGGER
groups_before_delete BEFORE DELETE ON groups
FOR EACH ROW
BEGIN
DECLARE students int;
SET students = (SELECT
count(title)
FROM
users u
INNER JOIN student_to_group stg ON (u.id = stg.student_id)
INNER JOIN groups g ON (stg.group_id = g.id)
GROUP BY
group_id
HAVING
group_id = OLD.id);
IF students = 0 THEN DELETE FROM groups where id = OLD.id;
END IF;
END;//
DELIMITER ;
它通过语法检查,但不起作用。有什么建议吗?
在此先感谢。
回答:
我不知道你为什么不想用外键和ON DELETE RESTRICT
更好的解决方案。
但是 - 要停止使用触发器进行删除,您需要在任何学生与该组关联时发出错误。并且不需要任何连接。您需要阅读的唯一表格是student_to_group
。你也不需要统计组中的所有学生。你只需要知道是否有学生与这个组相关联,最好用EXISTS
完成。
要引发错误,您可以使用SIGNAL命令。
DELIMITER // CREATE TRIGGER
groups_before_delete BEFORE DELETE ON groups
FOR EACH ROW
BEGIN
IF EXISTS (SELECT * FROM student_to_group stg WHERE stg.group_id = OLD.id) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot delete a group which has students';
END IF;
END//
DELIMITER ;
以上是 MySQL之前删除触发器双连接和条件 的全部内容, 来源链接: utcz.com/qa/266851.html