Maison >base de données >tutoriel mysql >Comment puis-je obtenir la fonctionnalité de mise à jour de clé en double de MySQL dans SQLite ?
SQLite Upsert : mise en miroir de la fonctionnalité de mise à jour de clé en double de MySQL
Le ON DUPLICATE KEY UPDATE
de MySQL simplifie l'insertion ou la mise à jour de lignes en fonction de contraintes de clé uniques. Cette requête unique insère une nouvelle ligne si la clé est unique ou met à jour une ligne existante si une clé en double est trouvée. SQLite n'a pas cet équivalent direct.
Solutions de contournement pour les upserts dans SQLite
SQLite propose des stratégies alternatives pour obtenir le même résultat :
1. SELECT puis INSERT ou UPDATE :
Cette méthode utilise deux requêtes :
SELECT
requête pour vérifier l'existence d'une ligne avec la clé donnée.INSERT
ou UPDATE
, selon le résultat de la requête SELECT
.Cette approche nécessite deux interactions de base de données, ce qui peut avoir un impact sur les performances.
2. MISE À JOUR, puis INSÉRER en cas d'échec :
Cela implique une seule UPDATE
requête avec gestion des erreurs :
UPDATE
réussi indique une ligne existante et les données sont mises à jour.UPDATE
(car la ligne n'existe pas) déclenche une requête INSERT
.Bien que cela réduise les appels à la base de données à un, cela nécessite une gestion supplémentaire des erreurs pour les INSERT
tentatives échouées (par exemple, en raison de clés en double).
Stratégie d'insertion SQLite optimale
La méthode d'upsert SQLite la plus efficace et la plus robuste combine INSERT OR IGNORE
et UPDATE
:
<code class="language-sql">INSERT OR IGNORE INTO visits VALUES ($ip, 0); UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;</code>
Cela nécessite une contrainte UNIQUE
ou PRIMARY KEY
sur la colonne "ip". Le INSERT OR IGNORE
tente l'insertion ; si une clé en double existe, elle est ignorée en silence. Le UPDATE
suivant incrémente ensuite le compteur d'accès pour la ligne existante. Cette solution offre à la fois efficacité (un seul aller-retour dans la base de données) et évite les erreurs dues aux insertions de clés en double.
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!