2

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

* 编辑 *

在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 指的是表数据正在被插入?

4

1 回答 1

1

您可能会从information_schema视图中获取该表中的列名列表,然后使用它们来创建准备好的语句(使用游标来迭代列名)并使用CONCAT()函数将查询字符串粘合在一起。然后执行准备好的语句。即使对我来说似乎也很做作,而且我不确定它是否会起作用(如果确实如此,它的效率会如何)

于 2013-10-11T20:55:06.600 回答