Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

INSERT INTO ... ON DUPLICATE UPDATE todos os valores


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 UPDATE em vez da linha existente com a qual INSERT declaraçã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.