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
是正确的语法,只支持表名。这里存在几乎相同的问题:可以应用相同的解决方案