O MySQL InnoDB na atualização das restrições em cascata atualizará corretamente durante um comando MySQL substituir?
Pergunta
Se eu tiver a Tabela B com referências de chave estrangeira para a Tabela A (definido como na atualização Cascade) e eu corro um
LOAD DATA INFILE file.txt REPLACE INTO TABLE A;
Comando, as referências serão atualizadas corretamente?
Observe que não estou falando sobre a Cascade Delete; Sei que um comando substituir excluirá registros na Tabela B se eu tiver esse conjunto.
Solução
O MySQL não dispara o evento de atualização como resultado de uma consulta de substituição, apenas a exclusão. Aqui está o porquê:
Substitua funciona exatamente como Insert, exceto que, se uma linha antiga na tabela tiver o mesmo valor que uma nova linha para uma chave primária ou um índice exclusivo, a linha antiga será excluída antes que a nova linha seja inserida.
Eu tenho um conjunto de chaves estrangeiras com a atualização Cascade no Delete Set NULL e, sempre que faço uma substituição para a chave primária da tabela estrangeira, a chave estrangeira na minha tabela relacionada é definida como NULL.
Outras dicas
Na verdade, cheguei aqui depois de procurar uma resposta semelhante. Parece que a substituição dos itens ainda exclui o tempo que você tiver na Cascade Set para excluir sua restrição.
Ver http://www.mysqlperformanceblog.com/2007/01/18/insert-on-duplicate-key update-and-replace-into/