Posts tagged ‘mysql’

22 de julho de 2010

Insert e Update na mesma query

por adlerparnas

Fala pessoal!

Meu nome é Adler Parnas, e estou aqui para falar de uma técnica de tratamento de exceção no MySQL.

Quantas vezes escrevemos códigos nas nossas classes Model para tratar de uma inserção ou atualização. Normalmente faço algo dessa forma:


class Meu_Model{

    public function save($item){

        if($item['id']){
            // update
        } else {
            // insert
        }
    }
}

Um grande recurso que descobri através de meu chefe Dino, é o tratamento de exceções para chaves duplicadas no MySQL.

INSERT INTO minha_tabela VALUES (meu_valor1, meu_valor2, meu_valor3)
       ON DUPLICATE KEY campo2=meu_valor2, campo3=meu_valor3

O que o MySQL faz, e acredito que outros SGDB‘s também fazem, é tentar o INSERT e caso ocorra uma exceção por chave duplicada ele faz um UPDATE dos campos listados na cláusula ON DUPLICATE KEY.

Reconheço que e este recurso não pode ser utilizado em todos os casos, mas é uma mão na roda para uma boa parte deles :D.

É isso ao pessoal! Espero que esta dica seja útil pra vocês como foi pra mim, e caso tenha dito algo errado, por favor me corrijam.

Fonte: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

Anúncios