我正在尝试创建一个触发器(这是我的第一个触发器和问题,所以要温和),它将新行插入到两个不同的表中。
* 编辑 *
添加这个因为我忘了提到它直到ypercube回答。 我试图避免列出所有列名,因为在现实世界中,将使用它的表有非常多的列(不是我的设计,重构太晚了)。
* 结束编辑 *
这是我目前所拥有的。
CREATE TABLE test_table (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
message VARCHAR(255)
);
CREATE TABLE test_table_copy LIKE test_table;
DELIMITER $$
CREATE TRIGGER copy_test_table_data AFTER INSERT ON test_table
FOR EACH ROW
BEGIN
INSERT INTO test_table_copy SELECT * FROM NEW;
END;$$
DELIMITER ;
不幸的是,这会导致错误。
mysql> INSERT INTO test_table VALUES (1, 'This is a message');
ERROR 1146 (4502): Table 'test_db.NEW' doesn't exist
我不太确定问题出在哪里,我认为 NEW 指的是表数据被插入到其中?
最佳答案
您可以从 information_schema
View 中获取该表中的列名列表,然后使用它们创建准备好的语句(使用游标迭代列名)和 CONCAT()
函数将查询字符串粘合在一起。然后执行准备好的语句。
甚至对我来说都显得很做作,而且我不确定它是否有效(如果有效,效率会有多高)
关于MySQL 触发器 INSERT 副本的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19324410/