MySQL触发器INSERT副本的行

时间:2013-10-11 17:55:24

标签: mysql sql

我正在尝试创建一个触发器(这是我的第一个触发器,问题,所以要温和),它会将新行插入两个不同的表中。

*编辑*

添加此内容,因为我忘记在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提到了表数据被插入?

1 个答案:

答案 0 :(得分:1)

您可以从information_schema视图中获取该表中的列名列表,然后使用它们创建预准备语句(使用游标迭代列名称)和CONCAT()函数将这些名称粘合在一起请求参数。然后执行准备好的语句。 看起来对我来说非常做作,我不确定它会起作用(如果它确实有效,那将是多么有效)