Estou tentando promover o uso de um sistema de versionamento de banco de dados (http://code.google.com/p/flyway/) no projeto em que estou trabalhando atualmente - e para esse fim quando fizermos alterações no banco de dados , estamos propagando essas alterações por meio de uma série de deltas. Ainda é muito cedo no momento, então tivemos o luxo de poder fazer deltas "destrutivos" e repovoar o DB pós-delta. Estamos chegando ao ponto em que precisamos ser capazes de reestruturar o banco de dados com dados de produção e, portanto, quero poder mover os dados de maneira ideal pelo banco de dados apenas no MySQL.
Por exemplo - desejo pegar o conteúdo da coluna de TABLE_1:the_value, criar a coluna em TABLE_2 e copiar os valores de TABLE_1 para TABLE_2 ONDE id_org e id_club correspondem
TABLE 1
--------------------------------
| id_org | id_club | the_value |
--------------------------------
| 213 | 213 | 1 |
--------------------------------
| 214 | 213 | 2 |
--------------------------------
| 212 | 210 | 5 |
--------------------------------
-- intervening DDL that adds "the_value" to table 2
-- 2nd row on table 1 not copied across due to absence of matching id's
TABLE 2
--------------------------------------------
| id_org | id_club | foo | the_value |
--------------------------------------------
| 213 | 213 | bar | 1 |
--------------------------------------------
| 212 | 210 | bar | 5 |
--------------------------------------------
Eu usei a construção FOR EACH ROW com Triggers antes, mas não consigo encontrar documentação no site do MySQL que sugira ou demonstre como usá-la para iterar sobre um conjunto de resultados para copiá-lo para a tabela de destino. Isso pode ser mais um reflexo da minha incapacidade de localizar as informações apropriadas.
Alguém pode me oferecer alguma indicação sobre este assunto?
Supondo que a TABELA 2 já exista com id_org, id_club e foo, basta criar a coluna 'the_value' e emitir uma chamada UPDATE usando joins
Veja o manual de ATUALIZAÇÃO