在另一个表中触发mysql删除?
我的数据库中有3个表:在另一个表中触发mysql删除?,sql,phpmyadmin,sql-delete,Sql,Phpmyadmin,Sql Delete,我的数据库中有3个表: | systems | |-------------| | system_id | |-------------| | systems_maintenances | |-------------------------| | systems_maintenances_id| | system_id | | maintenance_id | |-------------------------| |
| 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才是解决方案。看见