需要克隆一些记录(同时进行字段更新)。我找到了三种方法,但不确定哪种方法最好。
解决方案1,加载应用程序:获取应用程序中的记录,更新字段,然后插入新记录。(但需要获取记录:()
解决方案 2,INSERT INTO SELECT:效果很好,但是当表发生变化时需要更新(例如新字段)
INSERT INTO my_table (field_a, field_b, field_c)
SELECT 42, mt.field_b, mt.field_c
FROM my_table as mt
WHERE lc.field_a = 45;
解决方案 3,临时表可以吗?
BEGIN;
SELECT * INTO TEMPORARY temp_my_table FROM my_table WHERE field_a = 45;
UPDATE temp_my_table SET field_a = 42;
INSERT INTO my_table SELECT * FROM temp_my_table;
DROP TABLE temp_my_table;
END;
假设有 10 到 1000 条记录,最好的解决方案是什么?
第三个想法可以并发执行吗?
欢迎任何想法。
您的选项 2 是“正常”解决方案。
是的,如果表结构发生变化,您的查询将需要更改(除非所有新字段都可以为空)。但是,[很多]其他代码也需要更改,以利用新字段,所以这不应该成为问题。