Maison >base de données >tutoriel mysql >Comment simuler l'INSERT ON DUPLICATE KEY UPDATE de MySQL dans SQLite ?
Simulation de l'insert MySQL lors de la mise à jour d'une clé en double dans SQLite : guide complet
Les bases de données relationnelles doivent souvent mettre à jour un enregistrement lorsqu'il existe déjà, ou insérer un nouvel enregistrement lorsqu'il n'existe pas. Dans MySQL, cette fonctionnalité peut être obtenue en utilisant la syntaxe INSERT ... ON DUPLICATE KEY UPDATE, qui fournit un moyen pratique de combiner les opérations d'insertion et de mise à jour.
Cependant, SQLite ne supporte pas nativement cette syntaxe. Par conséquent, d’autres moyens d’obtenir le même effet dans SQLite doivent être explorés.
Une solution consiste à utiliser un SELECT combiné avec une requête INSERT ou UPDATE. Cela implique d'abord d'exécuter une requête SELECT pour vérifier si un enregistrement avec la même clé unique (par exemple, une adresse IP) existe. S'il existe, effectuez une requête UPDATE pour incrémenter la colonne des hits. S'il n'existe pas, une requête INSERT est exécutée pour créer un nouvel enregistrement.
Vous pouvez également combiner les requêtes UPDATE et INSERT. Ici, une requête UPDATE est d'abord exécutée, essayant d'incrémenter la colonne des hits pour une adresse IP spécifique. En cas de réussite, l'enregistrement existe et l'opération est terminée. Si la mise à jour échoue (car l'enregistrement n'existe pas), une requête INSERT est exécutée pour créer un nouvel enregistrement.
Les deux méthodes nécessitent une contrainte unique (ou clé primaire) sur la colonne concernée (par exemple ip).
Une autre solution efficace consiste à utiliser la déclaration suivante :
<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0); UPDATE visits SET hits = hits + 1 WHERE ip = $ip;</code>
Cette méthode implique d'utiliser l'instruction INSERT OR IGNORE pour tenter d'insérer un nouvel enregistrement. La clause IGNORE empêche qu'une erreur soit générée si l'enregistrement existe déjà. L'instruction UPDATE suivante tente d'incrémenter la colonne des hits pour une adresse IP spécifique. Si UPDATE réussit, cela signifie que l'enregistrement a été mis à jour avec succès. S'il échoue, cela signifie que l'enregistrement n'existe pas et que l'instruction INSERT l'a créé. Notez que LIKE
a été remplacé par =
pour garantir une correspondance exacte de l'adresse IP.
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!