A necessidade é clonar alguns registros (com atualização de campo ao mesmo tempo). Eu encontrei três maneiras, mas não tenho certeza qual é a melhor.
solução 1, LOAD IN APPLICATION : Busque os registros no aplicativo, atualize o campo e insira os novos registros. (mas precisa buscar os registros :( )
solução 2, INSERT INTO SELECT : Funciona bem, mas precisa ser atualizado quando a tabela for alterada (novo campo, por exemplo)
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;
solução 3, TABELA TEMPORÁRIA Tudo bem?
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;
Qual é a melhor solução, assumindo de 10 a 1000 registros?
A terceira ideia é adequada para execuções simultâneas?
Qualquer ideia é bem vinda.
Sua opção 2 é a solução "normal".
Sim, sua consulta precisará ser alterada se a estrutura da tabela for alterada (a menos que todos os novos campos sejam anuláveis). No entanto, [muitos] outros códigos também precisarão ser alterados, para fazer uso do novo campo, então isso não deve ser um problema.