代码之家  ›  专栏  ›  技术社区  ›  rtacconi

删除mysql前触发

  •  3
  • rtacconi  · 技术社区  · 15 年前

    我有一个名为user的表。此表具有部门表的外键。一个用户可以与一个部门关联。在删除部门之前,我想将任何用户(具有该部门ID)设置为默认值(1),以避免引用完整性错误。

    你知道一个很好的例子吗?大多数例子表明触发器应用于一个表。在这里,应该在department上触发触发器,但要更改用户表中的值。

    谢谢。

    3 回复  |  直到 15 年前
        1
  •  10
  •   Andy West    15 年前

    我没有测试过,但是 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;
    
        2
  •  3
  •   Ike Walker    15 年前

    在大多数情况下,最好在删除父级时将子级值设置为空,而不是像您这样使用默认值1。

    如果您决定此行为是适当的,那么您可以将其设置为外键的属性,并且根本不需要触发器。

    像这样:

    ALTER TABLE `user`
    ADD CONSTRAINT FK_USER_TO_DEPARTMENT FOREIGN KEY (department_id) 
    REFERENCES `department` (department_id) ON DELETE SET NULL;
    
        3
  •  0
  •   Stefan    15 年前

    您可以在触发器代码中使用任何SQL语句。删除记录时,触发代码被激发。您可以使用触发触发器的记录(选择部门ID),然后选择具有该ID的任何用户并更新该用户记录。 祝你好运