MySQL 触发器 INSERT 副本的行

标签 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 指的是表数据被插入到其中?

最佳答案

您可以从 information_schema View 中获取该表中的列名列表,然后使用它们创建准备好的语句(使用游标迭代列名)和 CONCAT() 函数将查询字符串粘合在一起。然后执行准备好的语句。 甚至对我来说都显得很做作,而且我不确定它是否有效(如果有效,效率会有多高)

关于MySQL 触发器 INSERT 副本的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19324410/

相关文章:

sql - 如何在 PostgreSQL 中快速将二维数组嵌套到一维数组中?

mysql - 如何保持自动增量批量加载

MySQL:如果另一个表中的值为 NULL,如何将值插入表中?

mysql - 首先显示最新的图像 - 没有 ID 或日期的表格?

mysql - GROUP by 和 WHERE 不能一起工作

sql - 返回最新的 'streak' 数据行

sql - PostgreSQL 中按数组重叠分组

php - 发送电子邮件并写入数据库不起作用

Javascript/PHP : set textarea value

mysql - [错误] native 表性能架构的结构错误