我有一个名为user的表。此表具有department表的外键。一个用户可以与一个部门相关联。在删除部门之前,我想将任何用户(具有该部门ID)设置为默认值(1)以避免参照完整性错误。
你知道一个很好的例子吗?大多数示例显示触发器应用于一个表。此处触发器应在部门上触发,但更改用户表中的值。
感谢。
答案 0 :(得分:10)
我还没有测试过,但是based on the documentation,这看起来是对的:
CREATE TRIGGER update_user_before_delete BEFORE DELETE ON department
FOR EACH ROW BEGIN
UPDATE user SET department = 1 WHERE department = OLD.department;
END;
答案 1 :(得分:3)
在大多数情况下,最好在删除父项时将子值设置为NULL,而不是像使用默认值一样使用默认值。
如果您认为此行为合适,则可以将其设为外键的属性,并且根本不需要触发器。
这样的事情:
ALTER TABLE `user`
ADD CONSTRAINT FK_USER_TO_DEPARTMENT FOREIGN KEY (department_id)
REFERENCES `department` (department_id) ON DELETE SET NULL;
答案 2 :(得分:0)
您可以在触发器代码中使用任何sql语句。删除记录时会触发触发器代码。您可以使用触发触发器的记录(选择部门ID),然后选择具有该ID的任何用户并更新该用户记录。 祝你好运