【发布时间】:2016-02-16 23:23:39
【问题描述】:
是否可以触发插入新行的所有列?基本上,我想在另一个表中复制新插入的记录,但是必须指定所有列。
类似
DELIMITER $$
CREATE TRIGGER TestTrigger
AFTER INSERT
ON Table1 FOR EACH ROW
BEGIN
INSERT INTO `Table2` SELECT * FROM NEW;
END$$
DELIMITER ;
但是,每当我尝试在 Table1 中插入新行时,这都会返回 Table 'Database.NEW' doesn't exist。
在触发器主体中,您可以使用别名 OLD 和 NEW 来引用主题表(与触发器关联的表)中的列。 OLD.col_name 在更新或删除之前引用现有行的列。 NEW.col_name 指的是要插入的新行的列或更新后的现有行。
【问题讨论】:
-
@lad2025 这不起作用 MySQL 返回“找不到表 DatabaseName.NEW”
-
无论如何手动指定所有列名,因为
SELECT *是不好的做法 9/10 案例 -
我其实不同意。我一直看到人们说做 x 是一种不好的做法,但 x 存在是为了使用,仅仅因为有些人滥用并不意味着它是不好的做法。如果您确实想要 ALL 列,
SELECT *正是您应该使用的 -
@Arijoon 谢谢你的评论。请查看已编辑的问题
-
NEW是行名还是表名?它必须是一个表名。SELECT <columns> table_name是正确的语法,只支持表名