Question :
Selon la définition d'UPSERT donnée par Wikipédia, il combine les opérations INSERT et UPDATE. L'objectif est d'implémenter une opération unique qui met à jour un enregistrement existant ou insère un nouvel enregistrement selon que l'enregistrement existe ou non.
Question :
Est-il possible d'effectuer un UPSERT dans SQLite sans effectuer au préalable un SELECT pour déterminer si une mise à jour ou une insertion est requise ?
Réponse :
Prise en charge UPSERT dans SQLite
SQLite version 3.24.0 a introduit la prise en charge d'UPSERT à l'aide de la clause ON CONFLICT.
Grammaire :
<code class="language-sql">INSERT OR REPLACE INTO 表名 (列1, 列2, ...) VALUES (值1, 值2, ...) ON CONFLICT (约束名) DO UPDATE SET 列1 = 值1, 列2 = 值2, ...</code>
Exemple :
Considérons un tableau avec les colonnes identifiant, nom et rôle. Créons une instruction UPSERT qui met à jour le nom et le rôle si l'identifiant existe, sinon insère un enregistrement avec la valeur par défaut pour le rôle.
<code class="language-sql">INSERT OR REPLACE INTO Employee (id, name, role) VALUES (1, 'John Doe', 'CEO') ON CONFLICT (id) DO UPDATE SET name = 'John Doe', role = 'CEO';</code>
Alternative :
Avant que SQLite ne prenne en charge UPSERT, il existait des moyens fastidieux d'obtenir des fonctionnalités similaires :
Comparaison avec SELECT :
UPSERT est généralement plus efficace que SELECT en premier car il effectue l'opération d'insertion ou de mise à jour en une seule requête. Cependant, si la table est très volumineuse, SELECT peut être plus rapide dans certains cas.
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!