MySql - 从相关表中删除行

时间:2016-08-16 09:29:23

标签: mysql sql triggers

我的表用户,公司和办公室有以下关系:

company --> user
office --> user
office --> company

更口头上:公司和办公室是用户。公司可能有办事处。

问题:如何实现以下目标:

  • 删除公司引用的用户时,也删除公司的条目
  • 删除办公室引用的用户时,也删除办公室的条目
  • 删除公司时,也删除引用的用户
  • 删除办公室时,也删除引用的用户
  • 删除公司时,还要删除所有引用办公室和用户表中的相应条目。

最后一点是有问题的,因为它会导致循环:删除用户(公司) - >删除公司 - >删除办公室(可以是多个) - >删除用户(办公室)。在用户表上有一个on delete触发器,导致从用户表中删除更多行。有解决方案吗谢谢!

编辑:这是我的(简化)架构:

CREATE TABLE user (
  user_id int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (user_id);

CREATE TABLE company (
  company_id int(11) NOT NULL AUTO_INCREMENT,
  fk_company_user int(11) NOT NULL,
  PRIMARY KEY (company_id),
  CONSTRAINT fk_company_user FOREIGN KEY (fk_company_user) REFERENCES 
    user (user_id) ON DELETE CASCADE ON UPDATE CASCADE;

CREATE TABLE office (
  office_id int(11) NOT NULL AUTO_INCREMENT,
  fk_office_user int(11) NOT NULL,
  fk_office_company int(11) NOT NULL,
  PRIMARY KEY (office_id),
  CONSTRAINT fk_office_company FOREIGN KEY (fk_office_company) REFERENCES
    company (company_id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT fk_office_user` FOREIGN KEY (fk_office_user) REFERENCES
  user (user_id) ON DELETE CASCADE ON UPDATE CASCADE;

0 个答案:

没有答案