O MySQL InnoDB na atualização das restrições em cascata atualizará corretamente durante um comando MySQL substituir?

StackOverflow https://stackoverflow.com/questions/2520480

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.

Foi útil?

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.

(De Manual de referência MySQL 5.0)

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/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top