在 MySql 触发器中,引用作为保留字的列名的正确语法是什么?

In MySql triggers, what is the correct syntax for referring to a column name which is a reserved word?

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”处,因为comment是MySql中的保留字并且在OLD之后,上面的查询没有即使使用反引号 ("`") 也能正常工作。

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

the error message is: SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 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。对 db_name.table2_name.record_created_date 列使用自动利用 (DEFAULT CURRENT_TIMESTAMP),您可以将其从 INSERT.

中跳过