Atualizar Registro se Existir Senão Inserir no MySQL com ON DUPLICATE KEY UPDATE

E ai galera, tudo certo?

Hoje estou aqui para dar uma dica rápida de MySQL. As vezes precisamos atualizar um registro caso ele já exista na tabela ou inserir um novo caso não exista, irei mostrar como fazer isso utilizando a cláusula ON DUPLICATE KEY UPDATE.

Segundo a documentação oficial do MySQL, ela serve para verificar se um índice único (unique index) ou uma chave primária (primary key) estão sendo duplicadas com uma nova inserção, caso esteja então ela atualiza o registro invés de inserir.

Vamos supor que você tenha a seguinte tabela customers com os dados abaixo:

Queremos atualizar o nome do registro de id = 2, mas vamos imaginar um cenário em que não sabemos se esse registro existe ou não na tabela, então executamos:

INSERT INTO customers (id, name) VALUES (2, 'Antônio Silva') ON DUPLICATE KEY UPDATE name = 'Antônio Silva';

Resultado:

Se o campo id for um índice único ou chave primária e for igual a 2 (que é o valor definido em VALUES), então o registro será atualizado com UPDATE name = 'Antônio Silva', caso não exista um registro com id = 2, então será inserido um novo com INSERT INTO customers (id, name) VALUES (2, 'Antônio Silva').

Vamos ver agora a inserção caso não exista o registro, executando o comando:

INSERT INTO customers (id, name) VALUES (5, 'André Marcos') ON DUPLICATE KEY UPDATE name = 'André Marcos';

Resultado:

Como não existe nenhum registro de valor único igual a 5, então cria-se um novo registro.

A documentação oficial do MySQL recomenda evitar o uso da cláusula "ON DUPLICATE KEY UPDATE" em tabelas que tenham vários índices únicos.

Bem simples né? Espero que tenham gostado.

Até mais.

Written on October 26, 2012

Share: