Maison >base de données >tutoriel mysql >Comment émuler efficacement la MISE À JOUR DE LA CLÉ EN DUPLICATION de MySQL dans SQLite ?

Comment émuler efficacement la MISE À JOUR DE LA CLÉ EN DUPLICATION de MySQL dans SQLite ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-15 14:09:43485parcourir

How to Efficiently Emulate MySQL's ON DUPLICATE KEY UPDATE in SQLite?

Simulation de la MISE À JOUR DE LA CLÉ EN DOUBLE de MySQL dans SQLite

SQLite ne dispose pas d'un équivalent direct de la clause ON DUPLICATE KEY UPDATE de MySQL, qui permet des mises à jour et des insertions efficaces d'enregistrements avec des contraintes uniques prédéfinies. Cependant, un effet similaire peut être obtenu grâce à des méthodes alternatives.

Méthodes alternatives

Afin de simuler un upsert dans SQLite, vous pouvez utiliser deux méthodes principales :

  1. SÉLECTIONNER (INSÉRER ou MISE À JOUR) :

    • Exécutez une requête SELECT pour vérifier si l'enregistrement existe.
    • Si l'enregistrement existe, exécutez une requête UPDATE pour incrémenter la colonne des hits.
    • Si l'enregistrement n'existe pas, exécutez une requête INSERT pour créer l'enregistrement.
  2. MISE À JOUR (INSÉRER si la MISE À JOUR échoue) :

    • Essayez d'exécuter une requête UPDATE pour incrémenter la colonne des hits d'un enregistrement existant.
    • Si la requête UPDATE échoue parce que l'enregistrement n'existe pas, exécutez une requête INSERT pour créer l'enregistrement.

Méthode recommandée

Les deux méthodes ont leurs avantages et leurs inconvénients, mais la deuxième méthode (en utilisant UPDATE (ou INSERT si UPDATE échoue)) est généralement plus efficace. Il ne nécessite qu'une seule opération de base de données et évite les requêtes SELECT inutiles.

Extraits de code suggérés

Voici un extrait de code suggéré pour implémenter la deuxième approche en utilisant une contrainte unique sur la colonne « ip » :

<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;</code>

Alternativement, l'extrait de code suivant provenant d'une autre solution Stack Overflow fournit une autre implémentation d'upsert fonctionnelle :

<code class="language-sql">INSERT INTO visits (ip, hits)
VALUES ($ip, COALESCE((SELECT hits FROM visits WHERE ip LIKE $ip), 0) + 1);</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn