mysql语法的问题
我试图在MySQL上创建一个触发器,但是我遇到了一个语法问题,我没有找到。如果有更多的经验可以帮助我,那将是我第一次使用MySQL 我创建这个触发器的原因是为了删除所有孤立标签,它与服务描述符有多对多关系。这两个实体由服务描述符链接 我的密码是:mysql语法的问题,sql,mysql,triggers,mysql-error-1064,Sql,Mysql,Triggers,Mysql Error 1064,我试图在MySQL上创建一个触发器,但是我遇到了一个语法问题,我没有找到。如果有更多的经验可以帮助我,那将是我第一次使用MySQL 我创建这个触发器的原因是为了删除所有孤立标签,它与服务描述符有多对多关系。这两个实体由服务描述符链接 我的密码是: CREATE TRIGGER `trg_delete_orphan_label` AFTER DELETE FOR EACH ROW ON `restdb`.`service_labels` DELETE FROM `restdb`.`lab
CREATE TRIGGER `trg_delete_orphan_label` AFTER DELETE
FOR EACH ROW ON `restdb`.`service_labels`
DELETE FROM `restdb`.`labels`
WHERE EXISTS (SELECT *
FROM old D
LEFT_JOIN `restdb`.`service_labels` SL ON SL.`id_label` = D.`id_label`
AND D.`id_service` = SL.`id_service`
WHERE SL.`id_label` IS NULL
`restdb`.`labels`.`id` = D.SL.`id_label`);
提前谢谢 你错过了,也错过了
试试这个代码
CREATE TRIGGER `trg_delete_orphan_label` AFTER DELETE FOR EACH ROW ON `restdb`.`service_labels`
DELETE
FROM
`restdb`.`labels`
WHERE
EXISTS (SELECT
*
FROM
old D LEFT_JOIN
`restdb`.`service_labels` SL ON
SL.`id_label` = D.`id_label` AND
D.`id_service` = SL.`id_service`
WHERE
SL.`id_label` IS NULL AND
`restdb`.`labels`.`id` = D.SL.`id_label`
);
你的触发器有几个问题,最明显的是每行的位置,以及当它实际上只是一行时,你对待旧数据的方式 这应该适合您:
DROP TRIGGER IF EXISTS `trg_delete_orphan_label`;
CREATE TRIGGER `trg_delete_orphan_label` AFTER DELETE ON `service_labels`
FOR EACH ROW
DELETE FROM `labels`
WHERE `id` = OLD.`id_label`
AND NOT EXISTS (
SELECT NULL
FROM `service_labels` SL
WHERE SL.`id_label` = `labels`.`id`
);
谢谢大家。。。因为你的帮助,我终于解决了这个问题 最后,工作是: 在restdb.service\u描述符上删除后创建触发器trg\u delete\u孤儿\u标签 每行 从restdb.labels中删除 我不在哪里 选择restdb.service\u labels.id\u label
来自restdb.service_标签 我添加了一个和。它仍然有一些语法问题,不过。。。谢谢你的支持!我很高兴你找到了一些有效的方法,尽管我注意到触发器现在在另一张桌子上。您的解决方案在功能和性能方面与我的略有不同。您的触发器将删除所有孤立行,而我的触发器仅删除新孤立行。我的方法也会更快,所以你可能想考虑一下。是的!这是事实。。。问题是,当触发器位于service_labels表上时,它不起作用,即使deleting语句对孤立语句也很有效。。。这是因为服务标签表没有被直接删除。。。它正在被cacade在服务完成后删除。。。因为这个原因,我改变了表格,也因为这个原因,我不得不改变逻辑!