我的数据库中有3个表:
| systems |
|-------------|
| system_id |
|-------------|
| systems_maintenances |
|-------------------------|
| systems_maintenances_id|
| system_id |
| maintenance_id |
|-------------------------|
| maintenances |
|-------------------------|
| maintenance_id |
|-------------------------|
当我删除系统时,我希望删除maintenance
目前它只在systems_maintenances
表中删除。
我认为触发器是最好的(也是唯一的)方法 我创建了这个:
CREATE TRIGGER `deleteMaintenance` BEFORE DELETE ON `systems`
FOR EACH ROW BEGIN
DELETE FROM maintenances
WHERE maintenance_id = systems_maintenances.maintenance_id;
END
问题是我收到错误:
DELETE FROM
SNMProject
。systems
WHEREsystems
。system_id
= 16MySQLarépondu:
#1054 - 'where子句
中的未知列'systems_maintenances.maintenance_id'
如何解决我的问题?
我不知道它是否可以提供帮助,但我对systems_maintenances
表也是如此:
test http://img110.xooimage.com/files/4/6/c/systems_maintenances-4754a0c.png
答案 0 :(得分:1)
在触发器中,您不会引用受影响的表的表名。相反,你引用它的代理。该proxie取决于数据库。在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
语句中。