..


Links Patrocinados

Menos consulta INSERT com ... ON DUPLICATE KEY UPDATE

Artigo escrito por Max Bossi

E 'bem sabido que uma gestão correta de consulta é um pré-requisito para a implementação estável e eficiente.
Neste artigo iremos apresentar uma sintaxe pouco conhecido, mas muito poderoso, eu estou falando sobre a cláusula ON DUPLICATE KEY UPDATE.

Esta cláusula é utilizada durante uma instrução INSERT e sua finalidade é verificar, antes da inserção, há uma duplicação de uma chave primária (chave primária) ou uma chave única (UNIQUE KEY), e se isso acontecer o motor un'UPDATE MySQL irá inserir vez.

A vantagem desta cláusula é clara: você escreve uma única consulta em vez de dois, com vantagens em termos de desempenho e limpeza de código.

Vamos dar um exemplo. Suponha que nós queremos fazer um script simples que executa o log de visitantes ao nosso site. Abaixo a estrutura da tabela do nosso DB:

  • IP (chave)
  • numero_visite
  • ultima_visita
Querendo gravar cada IP de trânsito em nossas páginas temos, de acordo com a lógica usual, primeiro fazer uma preliminar SELECT para verificar se o IP não estiver no DB e só se a resposta for negativa (IP não está presente) para consulta INSERT.

Graças à sintaxe INSERT ... ON DUPLICATE KEY UPDATE ... podemos alcançar o mesmo resultado com uma única consulta:

 



 Ip_visitatori INSERT INTO VALUES ('123 .123.123.123 ', 1, NOW ())

 





 ON KEY DPLICATE







 ATUALIZAÇÃO numero_visite numero_visite = + 1, ultima_visita = NOW ();

 
Assim, se o IP não é a inserção é feita, caso contrário você corre uma simples atualização do registro afetado. Usando essa sintaxe permite que você obtenha um benefício em termos de desempenho igual a 30%.

Com um pouco de imaginação e criatividade da cláusula em questão não pode ser muito útil em várias circunstâncias.
Por exemplo, podemos usá-lo em combinação com uma condição. Aqui está um exemplo: Suponha que você tenha uma tabela de um site de leilões on-line hipotética estruturado da seguinte forma:

  • ID_asta
  • migliore_offerta
Suponha que você queira continuar com a inserção de uma nova oferta, se o leilão já ofereceu haverá uma simples atualização, mas apenas se a oferta é maior do que já está presente:
 



 INSERT INTO propostas VALUES (1, 120)

 





 ON KEY DPLICATE







 ATUALIZAÇÃO migliore_offerta = IF (VALUES (migliore_offerta) <120, 120, VALUES (migliore_offerta))

 
Através de uma consulta simples resolvemos de uma só vez ... Caso contrário, teríamos de usar várias consultas, resultando em desperdício de recursos (e um risco maior de erros).

Na mesma categoria ...
E-Learning
MS Access (Curso) MS Access (Curso)
Saiba como criar e gerenciar bancos de dados com facilidade e rapidez. A partir de 29 €.
MySQL (Curso) MySQL (Curso)
Gestão de banco de dados open-source. A partir de 39 €.
SQL e Banco de Dados (Curso) SQL e Banco de Dados (Curso)
Criar e gerenciar bancos de dados relacionais. A partir de 39 €.
Links Patrocinados