0
CREATE TRIGGER `db_name`.`trigger_name` BEFORE DELETE ON `db_name`.`table1_name` 
FOR EACH ROW 
BEGIN 
INSERT INTO `db_name`.`table2_name`(table2_id,`comment`,record_created_date) 
VALUES (OLD.id, OLD.`comment`, NOW()); 
END

语法错误发生在“OLD comment”。因为注释是 MySql 中的保留字并且它在 OLD 之后,即使使用反引号(“`”),上面的查询也不起作用。

当然,最简单的解决方案是更改列名。但是,就我而言,这不是一个选择。如果您知道正确的语法,请提供帮助。谢谢。

4

1 回答 1

1

错误消息是: SQL 错误(1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 5 行的 '' 附近使用正确的语法。

第 5 行是代码中包含第一个分号的行。您忘记了 DELIMITER 重新分配。

所以

DELIMITER ;;

CREATE TRIGGER `db_name`.`trigger_name` BEFORE DELETE ON `db_name`.`table1_name` 
FOR EACH ROW 
BEGIN 
INSERT INTO `db_name`.`table2_name`(table2_id,`comment`,record_created_date) 
VALUES (OLD.id, OLD.`comment`, NOW()); 
END
;;

DELIMITER ;

但是您的触发器仅包含一个语句,因此请删除 BEGIN 和 END 行。在这种情况下,不需要重新分配 DELIMITER。

CREATE TRIGGER `db_name`.`trigger_name` BEFORE DELETE ON `db_name`.`table1_name` 
FOR EACH ROW 
INSERT INTO `db_name`.`table2_name`(table2_id,`comment`,record_created_date) 
VALUES (OLD.id, OLD.`comment`, NOW()); 

PS。对列使用 autoutilizing ( DEFAULT CURRENT_TIMESTAMP) db_name.table2_name.record_created_date,您可以将其从INSERT.

于 2022-01-21T05:18:22.120 回答