在另一个表中触发mysql删除?

在另一个表中触发mysql删除?,sql,phpmyadmin,sql-delete,Sql,Phpmyadmin,Sql Delete,我的数据库中有3个表: | systems | |-------------| | system_id | |-------------| | systems_maintenances | |-------------------------| | systems_maintenances_id| | system_id | | maintenance_id | |-------------------------| |

我的数据库中有3个表:

|    systems  |
|-------------|
|  system_id  |
|-------------|

|   systems_maintenances  |
|-------------------------|
|  systems_maintenances_id|
|  system_id              |
|  maintenance_id         |
|-------------------------|


|        maintenances     |
|-------------------------|
|  maintenance_id         |
|-------------------------|
我希望在删除系统时,
维护
也被删除。
目前它只删除
系统维护
表中的内容

我认为触发是最好(也是唯一?)的方法。
我创建了这个:

CREATE TRIGGER `deleteMaintenance` BEFORE DELETE ON `systems`
 FOR EACH ROW BEGIN
  DELETE FROM maintenances
  WHERE maintenance_id = systems_maintenances.maintenance_id;
END
问题是我得到了错误:

SNMProject
systems
中删除,其中
systems
system\u id
=16

MySQL a répondu:

#1054-where子句中的未知列“系统维护.维护id”

如何解决我的问题

我不知道它是否有帮助,但我也为
systems\u maintenances
表准备了这个:



(来源:)

在触发器中,您不会引用受影响表的表名。相反,您引用了它的代理。该代理依赖于数据库。在MySQL中,它是
new
old

我怀疑你想要这样的东西:

CREATE TRIGGER `deleteMaintenance` BEFORE DELETE ON `systems` FOR EACH ROW BEGIN
          DELETE FROM maintenances m
          WHERE maintenance_id IN (SELECT maintenance_id
                                   FROM systems_maintenances sm
                                   WHERE systems_maintenances.system_id = old.system_id
                                  )
END;
有其他的方式来表达这种逻辑,但这给出了一个很好的结构概念


如果愿意的话,您可以使用级联删除来执行基本相同的操作。这样,您就不必编写触发器,可以将逻辑放入
create table
语句中。

触发器不是解决方案,DELETE CASCADE才是解决方案。看见