在MySQL 8数据库中,我有两个处于不同模式的相同表,其中一个用作其等效生产表的临时表。这些表包含200多个列,将来还会添加更多列,因此很难为列名明确定义值。
我需要使用AFTER INSERT触发器将生产表中的值与登台表中的值进行INSERT或UPDATE,其中在生产表中一行的所有值都在存在重复的PRIMARY KEY的情况下被替换。请注意,生产表已定义了其PRIMARY KEY。
此后,我应该从登台表中删除所有行。
这是我尝试过的代码:
CREATE TRIGGER stage.my_table_after_insert AFTER INSERT ON my_table
FOR EACH ROW
BEGIN
REPLACE INTO prod.my_table
SELECT * FROM new;
DELETE FROM stage.my_table
END
答案 0 :(得分:0)
我不明白您为什么这样做,但为什么不这样做:
REPLACE INTO prod.my_table
SELECT * FROM stage.my_table;
DELETE FROM stage.my_table;
答案 1 :(得分:0)
您不能在其自身包含的触发器内更改表。此外,使用触发器将每行执行一次所有SQL语句(这种情况下效率低下)。因此,可以使用以下程序代替执行所需功能的程序:
DELIMITER $$
CREATE PROCEDURE stage.load_data()
BEGIN
REPLACE INTO prod.my_table
SELECT * FROM stage.my_table;
DELETE FROM stage.my_table;
END$$
DELIMITER ;