MySQL触发器插入所有新列

MySQL触发器插入所有新列,mysql,triggers,insert,Mysql,Triggers,Insert,是否可以触发插入新行的所有列?基本上,我想在另一个表中复制新插入的记录,但必须指定所有列 差不多 DELIMITER $$ CREATE TRIGGER TestTrigger AFTER INSERT ON Table1 FOR EACH ROW BEGIN INSERT INTO `Table2` SELECT * FROM NEW; END$$ DELIMITER ; 但是,每当我尝试在Table1中插入新行时,返回的Table“Database.NEW”不存在 : 在

是否可以触发插入新行的所有列?基本上,我想在另一个表中复制新插入的记录,但必须指定所有列

差不多

DELIMITER $$

CREATE TRIGGER TestTrigger
AFTER INSERT
   ON Table1 FOR EACH ROW

BEGIN
    INSERT INTO `Table2` SELECT * FROM NEW;
END$$
DELIMITER ;
但是,每当我尝试在
Table1
中插入新行时,返回的
Table“Database.NEW”不存在

:

在触发器主体中,可以使用别名OLD和NEW来引用subject表(与触发器关联的表)中的列。OLD.col_name是指更新或删除现有行之前的列。NEW.col_name是指要插入的新行或更新后的现有行的列


尽管这个问题一直没有得到回答,但您可以使用源表中的主键选择所有字段(如果有)

CREATE TRIGGER replicated_table AFTER INSERT ON source_table FOR EACH ROW
BEGIN
    INSERT INTO replicated_table SELECT * FROM source_table WHERE id=NEW.id;
END

此外,您可能更喜欢使用
REPLACE
而不是
INSERT
,以确保表不会脱离加密。

@lad2025不起作用MySQL返回“找不到表DatabaseName.NEW”无论如何手动指定所有列名,因为
SELECT*
是错误的做法9/10案例我实际上不同意。我一直看到人们说做x是一种不好的做法,但x的存在是为了被使用,仅仅因为有些人滥用并不意味着这是一种不好的做法<代码>选择*
正是如果您确实需要所有columns@Arijoon谢谢你的评论。请查看编辑后的问题是
NEW
行还是表名?它必须是一个表名
SELECT table_name
是正确的语法,只支持表名。这里存在几乎相同的问题:可以应用相同的解决方案