MySQL触发器编译失败求助:删除pedido_itens后自动删除pedido
MySQL触发器编译错误修正方案
你的触发器代码存在三个关键问题,导致无法编译:
- IF语法不符合MySQL规范:MySQL的IF条件块必须以
THEN开头,原代码缺少这个关键字。 - 伪记录引用错误:
pedido_itens.old.ID_PEDIDO写法错误,触发器中的OLD是当前触发表(pedido_itens)的伪记录,直接写OLD.ID_PEDIDO即可。 - 缺少完整触发器定义:你只提供了触发器的执行体,没有指定触发时机、触发表等核心定义,MySQL无法识别这是一个有效的触发器。
以下是完整的可编译代码,完全满足你的需求(删除pedido_itens中无剩余条目的对应pedido记录):
DELIMITER // CREATE TRIGGER delete_empty_pedido AFTER DELETE ON pedido_itens FOR EACH ROW BEGIN IF NOT EXISTS (SELECT * FROM pedido_itens WHERE ID_PEDIDO = OLD.ID_PEDIDO) THEN DELETE FROM pedido WHERE ID = OLD.ID_PEDIDO; END IF; END // DELIMITER ;
代码说明:
DELIMITER //:临时修改SQL语句分隔符为//,避免触发器内部的分号被MySQL误判为语句结束。AFTER DELETE ON pedido_itens:指定触发器在pedido_itens表执行DELETE操作后触发。FOR EACH ROW:每删除一条pedido_itens记录,就执行一次剩余条目检查。- 修正后的IF语句添加了
THEN关键字,符合MySQL语法规范;DELETE语句直接通过OLD.ID_PEDIDO关联pedido表的主键,实现精准删除。
内容的提问来源于stack exchange,提问作者Jean Guanabara
相关产品推荐
相关产品推荐

