我正在尝试创建一个触发器(这是我的第一个触发器,问题,所以要温和),它会将新行插入两个不同的表中。
*编辑*
添加此内容,因为我忘记在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提到了表数据被插入?
答案 0 :(得分:1)
您可以从information_schema
视图中获取该表中的列名列表,然后使用它们创建预准备语句(使用游标迭代列名称)和CONCAT()
函数将这些名称粘合在一起请求参数。然后执行准备好的语句。
看起来对我来说非常做作,我不确定它会起作用(如果它确实有效,那将是多么有效)