我搜索了所有可能的在线解决方案,但我无法弄清楚此触发器中的错误。
CREATE TRIGGER `delete_neat_link`
AFTER DELETE ON `neat_urls`
FOR EACH ROW
BEGIN
DELETE FROM `css_paths`
WHERE `css_paths`.`path_id` = OLD.`neat_link`;
END;
第一个错误出现在 OLD。neat_link
syntax error, unexpected END_OF_INPUT, expecting ';'
,第二个在 END;
syntax error, unexpected END
任何帮助都会很明显,谢谢。
答案 0 :(得分:5)
这个问题是由于解释个别陈述。 CREATE TRIGGER语句就是这样一个完整的语句,必须按原样发送给服务器。通常语句边框由默认分隔符(分号)识别。但是在存储程序的情况下,需要使用分号来分隔内部语句。这会使客户端感到困惑,因为它无法区分存储程序的内部语句或完整语句,因为它必须作为一个整体发送到服务器。
因此引入了DELIMITER语句,该语句仅适用于客户端(不是服务器,服务器本身无法解析此语句)。它将默认分隔符更改为您选择的一个,从而使客户端在哪里查找语句的结尾。因此典型案例如下:
DELIMITER ;;
CREATE TRIGGER `ins_film` AFTER INSERT ON `film` FOR EACH ROW BEGIN
INSERT INTO film_text (film_id, title, description)
VALUES (new.film_id, new.title, new.description);
END;;
答案 1 :(得分:2)
它们只是Trigger主体中的一个语句,因此不需要使用BEGIN-END复合语句构造。试试这个:
CREATE TRIGGER `delete_neat_link`
AFTER DELETE ON `neat_urls`
FOR EACH ROW
DELETE FROM `css_paths`
WHERE `css_paths`.`path_id` = OLD.`neat_link`
答案 2 :(得分:2)
另一种可能的解决方案
DELIMITER $$
CREATE TRIGGER `delete_neat_link`
AFTER DELETE ON `neat_urls`
FOR EACH ROW
BEGIN
DELETE FROM `css_paths`
WHERE `css_paths`.`path_id` = OLD.`neat_link`;
END$$
DELIMITER ;