"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como implementar atualizações condicionais com INSERT ... ON DUPLICATE KEY em SQL?

Como implementar atualizações condicionais com INSERT ... ON DUPLICATE KEY em SQL?

Publicado em 2025-01-09
Navegar:302

How to Implement Conditional Updates with INSERT ... ON DUPLICATE KEY in SQL?

ATUALIZAÇÕES CONDICIONAIS para INSERT ... ON DUPLICATE KEY

Inserir ou atualizar registros com base em condições de chave duplicadas é um cenário comum na programação de banco de dados . No entanto, às vezes pode ser necessário restringir ainda mais a condição de atualização, tornando-a dependente de critérios adicionais. Infelizmente, a sintaxe INSERT ... ON DUPLICATE KEY UPDATE não oferece suporte nativo a cláusulas WHERE para atualizações condicionais.

Superando a limitação

Para contornar essa limitação, você pode utilizar a função IF() dentro da cláusula UPDATE. A função IF() permite que você especifique um valor alternativo com base em uma determinada expressão lógica.

Exemplo de Implementação

Considere o seguinte INSERT ... ON DUPLICATE KEY UPDATE consulta:

INSERT INTO daily_events (created_on, last_event_id, last_event_created_at)
VALUES ('2010-01-19', 23, '2010-01-19 10:23:11')
ON DUPLICATE KEY UPDATE
  last_event_id = IF(last_event_created_at < VALUES(last_event_created_at), VALUES(last_event_id), last_event_id);

Nesta consulta, a cláusula UPDATE contém uma instrução IF() que verifica se o valor last_event_created_at existente é menor que o valor sendo inserido. Caso o valor existente seja mais antigo, a atualização será realizada, substituindo last_event_id pelo novo valor. Caso contrário, o last_event_id existente será preservado.

Considerações adicionais

  • Lembre-se de que IF() é avaliado como NULL se a condição for falsa. Portanto, o valor atualizado para last_event_id também será NULL se a condição não for atendida.
  • Considere usar uma cláusula WHERE adicional ou uma consulta UPDATE separada para garantir a filtragem desejada da atualização.
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3