SQLite RequĂȘte INSERT, UPDATE, DELETE avec exemple

⚡ RĂ©sumĂ© intelligent

SQLite Les instructions INSERT, UPDATE et DELETE modifient les données d'une base de données en ajoutant de nouvelles lignes, en modifiant les valeurs existantes et en supprimant des enregistrements, tandis que la clause ON CONFLICT détermine comment les violations de contraintes sont résolues au cours de ces opérations.

  • 📝 INSÉRER: L'instruction INSERT ajoute une ou plusieurs nouvelles lignes, en listant les colonnes cibles et leurs valeurs grĂące Ă  la clause VALUES.
  •  MISE À JOUR: L'instruction UPDATE modifie les valeurs de colonnes existantes, en utilisant SET pour les nouvelles donnĂ©es et WHERE pour cibler des lignes spĂ©cifiques.
  • đŸ‡§đŸ‡· EFFACER: L'instruction DELETE supprime les lignes qui correspondent Ă  une condition WHERE, ou toutes les lignes lorsque la clause WHERE est omise.
  • ⚠ Clause de conflit : La clause ON CONFLICT rĂ©sout les violations de contraintes par le biais de ROLLBACK, ABORT, FAIL, IGNORE ou REPLACE.
  • (I.e. Transactions: Une transaction de base de donnĂ©es regroupe plusieurs opĂ©rations en une seule unitĂ© qui soit les valide entiĂšrement, soit les annule entiĂšrement.
  • đŸ€– Assistance IA : Les outils d'IA de conversion de texte en SQL et GitHub Copilot gĂ©nĂšrent SQLite Instructions INSERT, UPDATE et DELETE Ă  partir d'invites en langage clair.

SQLite RequĂȘte INSERT, UPDATE, DELETE

RequĂȘte d'insertion, de mise Ă  jour et de suppression dans SQLite

Les clauses de modification des données dans SQLite sont les instructions INSERT, UPDATE et DELETE. Il est utilisé pour insérer de nouvelles lignes, mettre à jour des valeurs existantes ou supprimer des lignes de la base de données.

Notez que, pour tous les exemples suivants, vous devez exĂ©cuter sqlite3.exe et ouvrir une connexion Ă  l'exemple de base de donnĂ©es de maniĂšre fluide :

Étape 1) Dans cette Ă©tape,

  • Ouvrez Poste de travail et accĂ©dez au rĂ©pertoire suivant « C:\sqlite Â» et
  • Ouvrez ensuite « sqlite3.exe » :

SQLite RequĂȘte - INSÉRER, METTRE À JOUR, SUPPRIMER

Étape 2) Ouvrez la base de donnĂ©es « TutorialsSampleDB.db Â» Ă  l’aide de la commande suivante :

.open TutorialsSampleDB.db

SQLite RequĂȘte - INSÉRER, METTRE À JOUR, SUPPRIMER

Vous ĂȘtes maintenant prĂȘt Ă  exĂ©cuter n’importe quel type de requĂȘte sur la base de donnĂ©es.

SQLite INSERT

SQLite INSERT est utilisĂ© pour insĂ©rer des enregistrements dans une table spĂ©cifiĂ©e de la base de donnĂ©es. vous devez utiliser la clause 'INSERT'. La syntaxe de la clause INSERT est la suivante :

SQLite INSERT

  • AprĂšs la clause INSERT, vous devez indiquer dans quelle table vous devez insĂ©rer les valeurs.
  • AprĂšs le nom de la table dans laquelle vous Ă©crivez la liste des colonnes dans lesquelles vous souhaitez insĂ©rer les valeurs.
  • Vous pouvez ignorer le nom des colonnes et ne pas y Ă©crire.
  • Si vous n'Ă©crivez pas le nom des colonnes, les valeurs seront insĂ©rĂ©es dans toutes les colonnes du tableau avec le mĂȘme ordre, les colonnes sont dĂ©finies dans le tableau.
  • AprĂšs la clause VALUES, vous devez lister les valeurs Ă  insĂ©rer.
  • Chaque clause INSERT insĂšre une seule ligne. Si vous souhaitez insĂ©rer plusieurs lignes, vous devez Ă©crire plusieurs clauses INSERT, une pour chaque ligne.

SQLite Insérer un exemple

Dans l'exemple suivant, nous allons insĂ©rer 2 lignes dans la table des Ă©tudiants, une pour chaque Ă©tudiant :

INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth)
              VALUES(11, 'Ahmad', 4, '1997-10-12');

INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');

Cela devrait s'exĂ©cuter correctement et il n'y a aucune sortie pour ceci :

SQLite insérer

Cela insĂ©rera deux Ă©tudiants :

  • Le premier Ă©tudiant avec StudentId=11, StudentName = Ahmad, DepartmentId = 4 et DateOfBirth = 1997-10-12.
  • Le deuxiĂšme Ă©tudiant avec StudentId=12, StudentName = Aly, DepartmentId = 4 et DateOfBirth = 1996-10-12'.

Dans la premiÚre déclaration, nous avons listé les noms des colonnes « StudentId, StudentName, DepartmentId, DateOfBirth ». Cependant, dans la deuxiÚme déclaration, nous ne l'avons pas fait.

Les quatre valeurs « 12, 'Aly', 4, '1996-10-12' Â» seront insĂ©rĂ©es dans les quatre colonnes de la table Students dans le mĂȘme ordre que celui dans lequel les colonnes sont dĂ©finies.

Vérifions maintenant que les deux étudiants ont été insérés dans la table Students en exécutant la commande suivante question:

SELECT * FROM Students;

Ensuite, vous devriez voir les deux Ă©tudiants renvoyĂ©s par cette requĂȘte comme suit :

SQLite insérer

SQLite Mises Ă  jour

SQLite La requĂȘte UPDATE permet de modifier les enregistrements existants dans une table. Vous pouvez utiliser la clause WHERE avec la requĂȘte UPDATE pour mettre Ă  jour les lignes sĂ©lectionnĂ©es. La clause UPDATE met Ă  jour une table en modifiant une valeur pour une colonne spĂ©cifique. Voici la syntaxe de la clause UPDATE :

SQLite Mises Ă  jour

Comme suit:

  • AprĂšs la « clause de mise Ă  jour Â», vous devez Ă©crire le nom de la table Ă  mettre Ă  jour.
  • Vous devez Ă©crire la « clause SET » qui sert Ă  Ă©crire le nom de la colonne Ă  mettre Ă  jour et la valeur Ă  mettre Ă  jour.
  • Vous pouvez mettre Ă  jour plusieurs colonnes. Vous pouvez utiliser une virgule entre chaque ligne.
  • Vous pouvez spĂ©cifier une clause WHERE pour spĂ©cifier certaines lignes uniquement. Seules les lignes que l'expression Ă©value comme Ă©tant vraies sont mises Ă  jour. Si vous n'avez pas spĂ©cifiĂ© de clause WHERE, toutes les lignes seront mises Ă  jour.

SQLite Exemple de mise Ă  jour

Dans l'instruction UPDATE suivante, nous mettrons Ă  jour le DepartmentId de l'Ă©tudiant avec StudentId = 6 pour qu'il soit 3 :

UPDATE Students
SET DepartmentId = 3 
WHERE StudentId = 6;

Cela devrait s'exĂ©cuter correctement et vous ne devriez obtenir aucun rĂ©sultat :

SQLite Mises Ă  jour

Dans la clause UPDATE, nous avons précisé que nous souhaitions mettre à jour la table Students.

  • Dans la clause WHERE, nous avons filtrĂ© tous les Ă©tudiants pour sĂ©lectionner uniquement la ligne pour StudentId = 6.
  • La clause SET mettra Ă  jour la valeur de l'identifiant du dĂ©partement pour les Ă©tudiants sĂ©lectionnĂ©s Ă  3.

VĂ©rifions maintenant que l'Ă©tudiant avec l'ID 6 est mis Ă  jour, en exĂ©cutant la commande suivante :

SELECT * FROM Students WHERE StudentId = 6;

Vous devriez maintenant voir que la valeur de l'ID de service est dĂ©sormais 3, comme suit :

SQLite Mises Ă  jour

SQLite Supprimer

SQLite La requĂȘte DELETE est utilisĂ©e pour supprimer les enregistrements existants d’une table spĂ©cifiĂ©e. Vous pouvez utiliser la clause WHERE avec les requĂȘtes DELETE pour supprimer les lignes sĂ©lectionnĂ©es.

La clause DELETE a la syntaxe suivante :

SQLite Supprimer

  • Vous devez indiquer le nom de la table aprĂšs la clause DELETE FROM, c'est-Ă -dire la table dont vous souhaitez supprimer les enregistrements. (Remarque : la clause DELETE permet de supprimer certains enregistrements d'une table ou de supprimer tous les enregistrements, mais elle ne supprime pas la table elle-mĂȘme. En revanche, la clause DROP permet de supprimer la table entiĂšre et tous ses enregistrements.)
  • Si vous Ă©crivez la clause DELETE comme celle-ci « DELETE FROM guru », cela supprimera tous les enregistrements de la table « guru ».
  • Vous pouvez spĂ©cifier une condition WHERE avec une expression si vous souhaitez supprimer certaines lignes spĂ©cifiques. Seules les lignes pour lesquelles l'expression est Ă©valuĂ©e Ă  true seront supprimĂ©es. Par exemple, « DELETE FROM guru WHERE id > 5 » – cela supprimera uniquement les enregistrements dont l’identifiant est supĂ©rieur Ă  5.

Exemple

Dans l'instruction suivante, nous supprimerons deux Ă©tudiants avec StudentId 11 et 12 :

DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;

L'expression « StudentId = 11 OU StudentId = 12 » sera vraie uniquement pour les étudiants dont l'identifiant est 11 ou 12. La clause DELETE sera donc appliquée aux deux et ne supprimera que ces deux étudiants.

Cette commande devrait s'exĂ©cuter correctement et vous ne devriez obtenir aucun rĂ©sultat comme suit :

SQLite Supprimer

Vous pouvez vĂ©rifier que les deux Ă©tudiants ont Ă©tĂ© supprimĂ©s en sĂ©lectionnant tous les enregistrements de la table Étudiants comme suit :

SELECT * FROM Students;

Vous ne devriez pas voir les deux Ă©tudiants avec les identifiants 11 et 12 comme suit :

SQLite Supprimer

SQLite Clause de conflit

Supposons que vous disposiez d'une colonne qui prĂ©sente l'une des contraintes de colonne suivantes : UNIQUE, NOT NULL, CHECK ou PRIMARY KEY. Et puis vous avez essayĂ© d'insĂ©rer ou de mettre Ă  jour une valeur sur cette colonne avec une valeur qui entre en conflit avec cette contrainte.

Par exemple, si une colonne a une contrainte UNIQUE et que vous avez essayé d'insérer une valeur qui existe déjà (une valeur en double), ce qui est en conflit avec la contrainte UNIQUE. Ensuite, la clause CONFLICT vous permet de choisir quoi faire dans de tels cas pour résoudre ce conflit.

Avant de continuer à expliquer comment la clause CONFLICT résout le conflit. Vous devez comprendre ce qu'est une transaction de base de données.

Transaction de base de données

Le terme transaction de base de donnĂ©es est une liste de SQLite opĂ©rations (insertion, mise Ă  jour ou suppression). La transaction de base de donnĂ©es doit ĂȘtre exĂ©cutĂ©e en une seule unitĂ©, soit toutes les opĂ©rations exĂ©cutĂ©es avec succĂšs, soit aucune. Toutes les opĂ©rations seront annulĂ©es si l'une d'entre elles Ă©choue.

Exemple de transaction de base de données

La transaction de transfert d’argent d’un compte bancaire Ă  un autre impliquera plusieurs activitĂ©s. Cette opĂ©ration de transaction comprend le retrait d'argent du premier compte et son dĂ©pĂŽt sur un autre compte. Cette transaction doit ĂȘtre entiĂšrement rĂ©alisĂ©e ou entiĂšrement annulĂ©e et ne pas Ă©chouer Ă  mi-chemin.

Voici la liste des cinq résolutions que vous pouvez choisir dans la clause CONFLIT :

  1. ANNULATION – cette option annulera la transaction en cours SQLite dĂ©claration qui a le conflit (cela annulera toute la transaction). Par exemple, si vous essayez de mettre Ă  jour 10 lignes et que la cinquiĂšme ligne a une valeur qui entre en conflit avec une contrainte, aucune ligne ne sera mise Ă  jour, les 10 lignes resteront les mĂȘmes. Une erreur sera gĂ©nĂ©rĂ©e.
  2. ANNULER – cette action annulera l'opĂ©ration en cours. SQLite seule la dĂ©claration qui prĂ©sente le conflit et la transaction ne sera pas annulĂ©e. Par exemple, si vous essayez de mettre Ă  jour 10 lignes et que la cinquiĂšme ligne a une valeur en conflit avec une contrainte, seule la cinquiĂšme valeur ne sera pas mise Ă  jour mais les 9 autres lignes seront mises Ă  jour. Une erreur sera gĂ©nĂ©rĂ©e.
  3. ÉCHEC – interrompt le processus en cours SQLite dĂ©claration qui a le conflit. Cependant, la transaction ne se poursuivra pas, mais les modifications apportĂ©es aux lignes prĂ©cĂ©dant celle prĂ©sentant le conflit seront validĂ©es. Par exemple, si vous essayez de mettre Ă  jour 10 lignes et que la cinquiĂšme ligne a une valeur qui entre en conflit avec une contrainte, seules les 4 lignes seront mises Ă  jour et les autres non. Une erreur sera gĂ©nĂ©rĂ©e.
  4. IGNORER – cette option ignore la ligne contenant la violation de contrainte et poursuit le traitement des lignes suivantes. SQLite dĂ©claration. Par exemple, si vous essayez de mettre Ă  jour 10 lignes et que la cinquiĂšme ligne a une valeur qui entre en conflit avec une contrainte, seules les 4 lignes seront mises Ă  jour et les autres non. Il ne procĂ©dera pas plus loin pour mettre Ă  jour les autres lignes et s'arrĂȘtera Ă  la ligne qui a la valeur de conflit. Aucune erreur ne sera gĂ©nĂ©rĂ©e.
  5. REMPLACER – cela dĂ©pend du type de contrainte qui est violĂ©e :
    • Lorsqu’il y a une violation de contrainte pour la contrainte UNIQUE ou PRIMARY KEY. Le REPLACE remplacera la ligne Ă  l'origine de la violation par la nouvelle ligne insĂ©rĂ©e ou mise Ă  jour.
    • En cas de violation de contrainte NOT NULL, la clause REPLACE remplacera la valeur NULL par la valeur par dĂ©faut de cette colonne. Si la colonne n'a pas de valeur par dĂ©faut, alors SQLite annulera la dĂ©claration (la dĂ©claration sera annulĂ©e)
    • SI la violation de la contrainte CHECK se produit, la clause sera abandonnĂ©e.

Remarque : Les cinq solutions ci-dessus sont des options pour rĂ©soudre le conflit. Ce qui est applicable Ă  un type de conflit ne l’est pas forcĂ©ment Ă  d’autres.

Comment déclarer la clause CONFLIT

Vous pouvez dĂ©clarer la clause ON CONFLICT lorsque vous dĂ©finissez une contrainte pour une dĂ©finition de colonne dans la clause CREATE TABLE. En utilisant la syntaxe suivante :

SQLite Clause de conflit

Vous pouvez choisir l'une des cinq résolutions pour résoudre le conflit comme expliqué précédemment.

SUR LE CONFLIT IGNORER Exemple

Étape 1) CrĂ©ez un nouveau sujet de tableau comme suit :

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,
    [SubjectName] NVARCHAR NOT NULL
);

Notez que nous avons dĂ©fini une contrainte de clĂ© primaire sur la colonne SubjectId. Cette contrainte empĂȘche l'insertion de deux valeurs dupliquĂ©es dans la colonne SubjectId, garantissant ainsi l'unicitĂ© de toutes les valeurs de cette colonne. Notez Ă©galement que nous avons choisi « IGNORER Â» comme mode de rĂ©solution des conflits.

La commande devrait s'exĂ©cuter correctement et vous ne devriez obtenir aucune erreur :

SUR LE CONFLIT IGNORER Exemple

Étape 2) Maintenant, insĂ©rons quelques valeurs dans les nouveaux sujets de table, mais avec une valeur qui viole la contrainte de clĂ© primaire :

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

Dans cette instruction INSERT, nous avons essayĂ© d'insĂ©rer deux cours avec le mĂȘme identifiant de sujet de clĂ© primaire 2, ce qui constitue une violation de la contrainte de clĂ© primaire.

Les commandes devraient fonctionner correctement et vous ne devriez obtenir aucune erreur. Comme suit:

SUR LE CONFLIT IGNORER Exemple

Étape 3) SĂ©lectionnez tous les sujets du tableau comme suit :

SELECT * FROM Subjects;

Cela vous donnera la liste des sujets :

SUR LE CONFLIT IGNORER Exemple

Notez que seules trois matiĂšres ont Ă©tĂ© insĂ©rĂ©es : « AlgĂšbre, Cours de bases de donnĂ©es et
 » Algorithms» au lieu de 4 lignes.

La ligne dont la valeur viole la contrainte de clé primaire, à savoir « Structures de données », a été ignorée et n'a pas été insérée. Cependant, SQLite continue d'exécuter d'autres instructions aprÚs cette ligne.

Étape 4) SUPPRIMEZ les sujets de la table pour la recrĂ©er avec une clause ON CONFLICT diffĂ©rente pour l'exemple suivant en exĂ©cutant la commande suivante :

DROP TABLE Subjects;

La commande drop supprime la table entiùre. Les sujets de table n’existent plus.

SUR LE CONFLIT REMPLACEMENT Exemple

Étape 1) CrĂ©ez un nouveau sujet de tableau comme suit :

CREATE TABLE [Subjects] (  
    [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,
    [SubjectName] NVARCHAR NOT NULL
);

Notez que nous avons défini une contrainte PRIMARY KEY sur la colonne SubjectId. La contrainte de clé primaire ne permettra pas d'insérer deux valeurs dupliquées dans la colonne SubjectId afin que toutes les valeurs de cette colonne soient uniques.

Notez Ă©galement que nous avons choisi l'option « REMPLACER Â» pour la rĂ©solution des conflits. La commande devrait s'exĂ©cuter sans problĂšme et vous ne devriez rencontrer aucune erreur.

SUR LE CONFLIT REMPLACEMENT Exemple

Étape 2) Maintenant, insĂ©rons quelques valeurs dans la nouvelle table Sujets, mais avec une valeur qui viole la contrainte de clĂ© primaire :

INSERT INTO Subjects VALUES(1, 'Algebra');
INSERT INTO Subjects VALUES(2, 'Database Course');
INSERT INTO Subjects VALUES(2, 'Data Structures');
INSERT INTO Subjects VALUES(4, 'Algorithms');

Dans cette instruction INSERT, nous avons essayĂ© d'insĂ©rer deux cours avec le mĂȘme identifiant de sujet de clĂ© primaire 2, ce qui constitue une violation de la contrainte de clĂ© primaire.

Les commandes devraient fonctionner correctement et vous ne devriez obtenir aucune erreur. Comme suit:

SUR LE CONFLIT REMPLACEMENT Exemple

Étape 3) SĂ©lectionnez tous les sujets du tableau comme suit :

SELECT * FROM Subjects;

Cela vous donnera la liste des sujets :

SUR LE CONFLIT REMPLACEMENT Exemple

Notez que seuls trois sujets ont été insérés : « AlgÚbre, Structures de données et Algorithms» alors que nous avons essayé d'insérer 4 lignes.

La ligne dont la valeur enfreint la contrainte de clĂ© primaire, Ă  savoir « Structures de donnĂ©es Â», a remplacĂ© la valeur « Cours de bases de donnĂ©es Â» comme suit :

  • Les deux premiĂšres instructions insert fonctionnent correctement sans problĂšme. Deux matiĂšres, AlgĂšbre et Cours de base de donnĂ©es, seront insĂ©rĂ©es avec les identifiants 1, 2.
  • Lorsque vous SQLite Lorsqu'il tente d'exĂ©cuter la troisiĂšme instruction d'insertion avec SubjectId 2 et SubjectName « Data Structures Â», il constate qu'il existe dĂ©jĂ  un sujet avec SubjectId = 2. Ce qui constitue une violation de la contrainte de clĂ© primaire dĂ©finie sur la colonne SubjectId.
  • SQLite La mĂ©thode REPLACE sera choisie pour rĂ©soudre ce conflit. Elle remplace la valeur existante dans la table des matiĂšres par la nouvelle valeur issue de l'instruction INSERT. Ainsi, le nom de matiĂšre « Cours de bases de donnĂ©es Â» sera remplacĂ© par le nom de matiĂšre « Structures de donnĂ©es Â».

FAQ

UPSERT combine l'insertion et la mise à jour. SQLite 3.24.0 (2018), INSERT INTO 
 ON CONFLICT(column) DO UPDATE SET 
 insÚre une nouvelle ligne ou met à jour la ligne existante en cas de conflit de clé UNIQUE ou PRIMARY KEY. DO NOTHING ignore silencieusement la ligne.

La commande INSERT OR REPLACE supprime la ligne en conflit et en insÚre une nouvelle, rétablissant ainsi les valeurs par défaut des colonnes non listées. La commande ON CONFLICT DO UPDATE modifie la ligne existante sur place et la conserve.ping les autres colonnes restent intactes, ce qui en fait une véritable insertion inversée plus sûre.

AprĂšs VALUES, listez plusieurs groupes de valeurs, sĂ©parĂ©s par des virgules : INSERT INTO Students (id, name) VALUES (1,'A'), (2,'B'), (3,'C');. Ce formulaire Ă  plusieurs lignes fonctionne depuis SQLite 3.7.11 et est plus rapide que d'exĂ©cuter une instruction INSERT par ligne.

ExĂ©cutez la commande DELETE FROM table_name; sans clause WHERE. SQLite Cette commande ne possĂšde pas de fonction TRUNCATE, mais elle applique une optimisation de troncature qui supprime toutes les lignes en une seule fois. La structure de la table est conservĂ©e ; utilisez DROP TABLE pour supprimer complĂštement la table.

Depuis que SQLite Depuis la version 3.35.0 (2021), les instructions INSERT, UPDATE et DELETE acceptent une clause RETURNING optionnelle qui renvoie les lignes modifiĂ©es. Par exemple, INSERT 
 RETURNING id ; renvoie immĂ©diatement les valeurs gĂ©nĂ©rĂ©es, Ă©vitant ainsi une requĂȘte SELECT supplĂ©mentaire pour identifier les modifications.

Utilisez INSERT INTO 
 SELECT : INSERT INTO Archive (id, nom) SELECT id, nom FROM Students WHERE DepartmentId = 4;. SQLite insĂšre chaque ligne renvoyĂ©e par la requĂȘte SELECT, l'ordre et le nombre de colonnes doivent donc correspondre Ă  la table cible.

Oui. Les assistants IA de conversion de texte en SQL transforment les requĂȘtes en langage naturel en SQLite Les instructions INSERT, UPDATE et DELETE, y compris les clauses WHERE et ON CONFLICT, sont prises en charge. Indiquer les noms de vos tables et colonnes amĂ©liore la prĂ©cision, et chaque instruction gĂ©nĂ©rĂ©e doit ĂȘtre vĂ©rifiĂ©e et testĂ©e avant d'ĂȘtre exĂ©cutĂ©e sur des donnĂ©es rĂ©elles.

Copilote GitHub suggĂšre SQLite RequĂȘtes INSERT, UPDATE et DELETE directement dans les Ă©diteurs comme VS CodeIl lit le schĂ©ma et les commentaires environnants, de sorte que les suggestions rĂ©utilisent vos vĂ©ritables noms de tables et de colonnes, mais vous devez tout de mĂȘme vĂ©rifier chaque instruction avant de l'exĂ©cuter.

Résumez cet article avec :