在 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
.
中跳过
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
.