Maison > base de données > tutoriel mysql > SQLite peut-il effectuer des opérations UPSERT sans instruction SELECT préliminaire ?

SQLite peut-il effectuer des opérations UPSERT sans instruction SELECT préliminaire ?

Mary-Kate Olsen
Libérer: 2025-01-22 03:42:08
original
148 Les gens l'ont consulté

Can SQLite Perform UPSERT Operations Without a Preliminary SELECT Statement?

Opération UPSERT de SQLite : pas besoin d'instruction pré-SELECT

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>
Copier après la connexion

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>
Copier après la connexion

Alternative :

Avant que SQLite ne prenne en charge UPSERT, il existait des moyens fastidieux d'obtenir des fonctionnalités similaires :

  • INSERT PARTIEL : Insérez uniquement les colonnes que vous souhaitez mettre à jour, en laissant les autres colonnes par défaut. Toutefois, cela ne fonctionne que si la valeur par défaut est acceptable.
  • INSERT conditionnel : Utilisez une instruction SELECT pour vérifier si l'enregistrement existe, puis exécutez l'instruction INSERT ou UPDATE correspondante. Cette approche nécessite plusieurs accès à la base de données, ce qui peut ajouter une surcharge.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal