INSERT INTO … ON DUPLICATE KEY UPDATE funciona desta forma:- ele tenta inserir uma linha normalmente
- se ocorrer alguma violação de restrição em alguma coluna, ele executa o
UPDATEem vez da linha existente com a qualINSERTdeclaração conflitante
Isso significa simplesmente que se o
UPDATE instrução sozinha seria bem-sucedida, seu ON DUPLICATE KEY UPDATE equivalente também funcionará. Isso significa que você obviamente não pode violar nenhuma restrição no UPDATE ou a coisa toda falhará (por exemplo, tentar definir um valor em um UNIQUE coluna que já existe em outra linha). Se você definir o mesmo valor na mesma coluna novamente, isso é essencialmente um não operacional. O valor na coluna não muda e, portanto, também não pode causar nenhum erro (vamos supor que você não tenha nenhum
BEFORE UPDATE realmente estranho gatilhos que podem se comportar mal). O número de colunas é irrelevante aqui, você pode alterar quantas ou poucas em uma declaração quiser.