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

回到顶部