Maison >base de données >tutoriel mysql >Comment puis-je obtenir la fonctionnalité de mise à jour de clé en double de MySQL dans SQLite ?

Comment puis-je obtenir la fonctionnalité de mise à jour de clé en double de MySQL dans SQLite ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-15 14:11:441043parcourir

How Can I Achieve MySQL's ON DUPLICATE KEY UPDATE Functionality in 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 :

  • Une SELECT requête pour vérifier l'existence d'une ligne avec la clé donnée.
  • Une requête 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 :

  • Un UPDATE réussi indique une ligne existante et les données sont mises à jour.
  • Un échec 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!

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