[[info:bdd:accueilbdd|{{ :iconemaison.jpg?nolink&25|Sommaire Bdd}}]] ===== SQLite dans VSCode ===== [Mise à jour le 27/1/2026] {{ :info:bdd:sqlite.jpg?nolink&250|}} * **Ressources** * Le langage SQL * How To Download & Install SQLite Tools * Command Line Shell For SQLite * **Lectures connexes** * [[info:bdd:basesgene|Wiki - BDDR : généralités]] * [[:info:bdd:sqliteConsole|Wiki - BDDR - SQLite - Requêtes dans la console]] * [[:info:bdd:basesql|Wiki - BDDR - MySQL - Requêtes dans la console]] ---- ==== 1. Présentation ==== Le paragraphe "Programmation" fait référence au projet VSCode contenant la base //sejour.db//.Téléchargeable ici pour tester les exemples * **MCD** {{ :info:bdd:sejours.jpg?nolink |}} Remarque \\ - Chaque client séjourne dans une à plusieurs stations \\ - Chaque station accueille zéro ou plusieurs clients * **MLD** {{ :info:bdd:sejours2.jpg?nolink |}} Remarque : les flèches pointent vers les parents. **SQLITE3** doit être installé sur le PC (voir How To Download & Install SQLite Tools). L'extension SQLite doit être installée dans VSCode. \\ ====2. Programmation ==== {{ :informatique:bdd:sqlitevs1.png?nolink&200|}} === 2.1 Créer une base === {{ :info:bdd:sejour1.png?nolink&150|}} - Créer un **répertoire** et l'ouvrir dans VSCode (Exemple ci-contre : **Sejours**) - Créer un **fichier** avec l'extension **.db** (Exemple : //sejour.db//) L’extension de fichier **.db** contient la base de données créée avec le système de gestion de base de données **SQLite**. \\ === 2.2 Ouvrir la base dans l'explorateur Sqlite === //Exemple// : sélection de sejours.db {{ :informatique:bdd:sqlitevs2.png?nolink|}} Faire un **clic droit** sur le fichier **.db** et sélectionner **Open database** ou **F1 -> SQLite: Open database** et choisir la base de données.L'**explorateur** Sqlite (**SQLITE EXPLORER**) s'ouvre et affiche la base sélectionnée en bas et à gauche de la fenêtre. \\ === 2.3 Se connecter à la base === - Dans un **nouveau projet**, cliquer sur {{:info:bdd:sqlitechoix.png?nolink|}} dans la barre d'état et sélectionner **SQLite**. Dans un **projet existant**, cliquer sur un fichier **.sql** pour faire apparaître les données dans la barre d'état.\\ - Cliquer sur {{:info:bdd:sqlitechoix2.png?nolink|}} et sélectionner la base à utiliser (Ex : //sejour.db//). \\ \\ {{ :web:createtable.png?nolink|}} === 2.4 Créer une table === * **Ressource** : SQLITE tutorial - CREATE TABLE Contrairement à la norme SQL et aux autres systèmes de base de données, seulement trois modifications sont possibles:\\ - **Renommer** une table.\\ - **Renommer** une colonne. \\ - **Ajouter une nouvelle colonne** à une table.\\ En dehors de ces deux possibilités, **la table devra être reconstruite**. **Le nom des attributs doit donc être choisi avec soin**. {{ :info:bdd:sejour2.png?nolink|}} - Faire un clic droit sur le nom de la base dans **SQLITE EXPLORER** et sélectionner **New Query**. \\ * Une nouvelle page avec l'extension .sql s'ouvre dans l'éditeur. \\ * L'enregistrer avec le nom //creation.sql//. Les requêtes SQL de création des tables seront sauvegardées dans ce fichier. \\ * Entrer la requête ci-dessous dans le fichier //creation.sql//. {{ :web:infosql.png?nolink|}} CREATE TABLE clients ( id INTEGER PRIMARY KEY, -- alias de rowid nom VARCHAR(50), prenom VARCHAR(50), ville VARCHAR(50), region VARCHAR(50), solde INT ); - Sélectionner la requête, faire un clic droit dessus et sélectionner **Run Selected Query**. Si la requête est correcte, la page ci-dessous s'ouvre pour indiquer que la table a été créé. {{ :info:bdd:sejour5.png?nolink|}} {{ :info:bdd:sejour3.png?nolink&600 |}} - Rafraîchir la base en cliquant sur l'icône {{:info:bdd:sejour4.png?nolink|}} dans **SQLITE EXPLORER** pour voir apparaître la table //clients//. Le **paramétrage de VSCode** pour la prise en charge des **contraintes de clé étrangère** est traité au paragraphe 3 "**Contraintes d'intégrité**". \\ === 2.5 Supprimer une table === **DROP TABLE IF EXISTS** //nomtable//;

Poursuivre les modifications ici \\ === 2.6 Ajouter et modifier des données dans une table === {{ :web:insertinto.png?nolink|}} == 2.6.1 Ajouter des données == * **Ressource** : SQLITE tutorial - INSERT INTO //Syntaxe// INSERT INTO table1 VALUES (valeur1-1, sur toutes les colonnes...), (valeur2-1, sur toutes les colonnes...), ...; //Exemple// - Cliquer sur l'icône {{:informatique:bdd:sqlitevs9.png?nolink|}} pour créer une nouvelle page .sql. L'enregistrer sous le nom //insertions.sql//. - Nous allons placer les requêtes SQL d'insertion des données dans les tables dans ce fichier. \\ Entrer la requête ci-dessous dans le fichier //insertions.sql//. -- Un seul enregistrement -- Id est automatiquement incrémenté INSERT INTO clients(nom,prenom,ville,region,solde) VALUES ('Bauer','Elmut','Berlin','Europe',9825); - Sélectionner la requête, faire un clic droit dessus et sélectionner **Run Selected Query**.Si la requête est correcte, un clic sur {{:info:bdd:sejour7.png?nolink|}} dans **SQLITE EXPLORER** affiche la table comme ci-dessous.{{ :info:bdd:sejour6.png?nolink |}} - On peut également entrer plusieurs enregistrements dans la table comme dans la requête ci-dessous. -- Plusieurs enregistrements -- Id est automatiquement incrémenté INSERT INTO clients(nom,prenom,ville,region,solde) VALUES ('Smith','John','Londres','Europe',12436), ('Jonhson','Britney','New York','Amérique',6721); - Entrer cette requête dans le même fichier, la sélectionner et l'exécuter. La table doit maintenant correspondre à la figure ci-dessous. \\ {{ :web:update.png?nolink|}} == 2.6.2 Modifier des cellules == //Syntaxe// UPDATE table SET col1=val1 WHERE [sélection] //Exemple// - Cliquer sur l'icône {{:info:bdd:sqlitevs9.png?nolink|}} pour créer une nouvelle page .sql. L'enregistrer sous le nom //mises_a_jour.sql//. - Entrer la requête ci-dessous dans le fichier //mises_a_jour.sql//. UPDATE clients SET solde = 9000 WHERE nom="Bauer"; - Sélectionner la requête, faire un clic droit dessus et sélectionner **Run Selected Query**.Si la requête est correcte, un clic sur {{:info:bdd:sejour7.png?nolink|}} dans **SQLITE EXPLORER** affiche la table comme ci-dessous. {{ :info:bdd:sejour9.png?nolink |}} {{ :web:deletefrom.png?nolink|}} == 2.6.3 Supprimer des lignes == //Syntaxe// DELETE FROM table1 WHERE [sélection] //Exemple// DELETE FROM Clients WHERE Id>2 -- Supprime la troisième ligne dans la table \\ === 2.7 Interroger la base === * **Modèle logique de données** de la base sejour {{ :informatique:bdd:mldsejours.png?nolink |}} Les exemples ci-dessous peuvent être testés avec **VSCode** après avoir téléchargé et installé le projet Sejours. == 2.7.1 Requête de base == * **Ressource** : SQLITE tutorial - SELECT //Syntaxe// SELECT colonne1 [AS alias1], colonne2 [AS alias2] FROM table1 [AS t1], table2 [AS t2] WHERE [critères de jointure et sélection] GROUP BY colonnei ORDER BY colonnej [ASC|DESC]; {{ :web:selectfrom.png?nolink|}} == 2.7.2 Sélection simple == {{ :informatique:bdd:sqlitevs14.png?nolink&180|}} On peut sélectionner des colonnes d'une ou plusieurs tables données en paramètre avec **SELECT**. La commande **WHERE** permet de spécifier des critères de sélection. //Exemple// : nom et du lieu des stations se trouvant en Europe ? SELECT nomstation, lieu FROM stations WHERE region = 'Europe'; == 2.7.3 Tri des résultats == Il est possible de trier le résultat d'une requête avec la clause **ORDER BY** suivie de la liste des attributs suivie des mots-clés **ASC** (croissant) ou **DESC** (décroissant). Par défaut le tri est croissant. //Exemple// SELECT * FROM stations ORDER BY region ASC, lieu DESC; {{ :informatique:bdd:sqlitevs15.png?nolink&500 |}} == 2.7.4 Mise en forme == {{ :informatique:bdd:sqlitevs16.png?nolink&220|}} Il est possible de renommer les attributs avec le mot-clé **AS**. On utilise un alias pour en faciliter la lecture lors de l'affichage. //Exemple// : le contenu des colonnes //nom// et //prenom// est regroupé dans une colonne avec l'alias //Individu//. SELECT prenom||' '||nom AS Individu, ville AS Ville FROM clients; == 2.7.5 Fonctions de groupes (agrégation) == Les fonctions de groupe permettent d'obtenir des **informations sur un ensemble de lignes en travaillant sur les colonnes** et non pas sur les lignes comme avec WHERE. \\ //Exemples de fonctions // * **COUNT** donne le nombre de lignes d'une colonne. * **AVG** calcule la moyenne d'une colonne. * **SUM** calcule la somme d'une colonne * **MIN,MAX** calculent le minimum et le maximum d'une colonne {{ :informatique:bdd:sqlitevs17.png?nolink|}} //Exemple// : combien de stations situées en Europe sont-elles référencées dans la base de données ? SELECT COUNT(nomstation) AS Nombre FROM stations WHERE region='Europe'; == 2.7.6 Jointures == {{ :informatique:bdd:sqlitevs18.png?nolink&220|}} Une jointure permet d'associer plusieurs tables dans une même requête. //Syntaxe// SELECT colonne1 [AS c1], colonne2 [AS c2] FROM table1 [AS t1] JOIN table2 [AS t2] ON t1.clea = t2.cleb AND t1.cleb = t2.cleb; //Exemple// : liste (partiel) des clients avec les séjours qu'ils ont effectués. SELECT nom AS "Nom Client", nomstation AS Station FROM clients JOIN sejours ON clients.id=sejours.id ORDER BY nom; \\ ==== 3. Contraintes d'intégrité ==== * **Ressources** : SQLITE tutorial - FOREIGN KEY et Extension VSCode SQLite Les contraintes d’intégrité dans un SGBD sont des règles imposées aux données pour garantir leur cohérence, leur validité et leur fiabilité. Elles forment la “garde‑fou” logique d’une base relationnelle. ===🧱 3.1 Intégrité de domaine === * **Objectif** : empêcher des valeurs absurdes ou incohérentes. Chaque attribut doit respecter un type, un format et éventuellement un ensemble de valeurs autorisées. age INTEGER CHECK(age >= 0) email TEXT NOT NULL statut CHECK(statut IN ('actif','inactif')) \\ ===🔑 3.2 Intégrité de clé=== * **Objectif** : Garantir l’unicité et l’identification des tuples. * **Clé primaire (PRIMARY KEY)** \\ * Identifie chaque ligne de manière unique * Ne peut pas être NULL * **Clé candidate** \\ * Attribut(s) pouvant servir de clé primaire * **Clé unique (UNIQUE)** \\ * Valeurs distinctes mais peut accepter NULL \\ ===🔗 3.3 Intégrité référentielle === * **Objectif** : : éviter les “orphelins” et maintenir la cohérence des relations. Elle impose que la valeur existe dans la table référencée. ON DELETE RESTRICT → interdit la suppression si des enfants existent ON DELETE CASCADE → supprime aussi les enfants ON UPDATE CASCADE → met à jour les clés étrangères SET NULL / SET DEFAULT \\ ===✔️ 3.4 Contraintes CHECK === * **Objectif** : permettent d’exprimer des règles métier plus complexes. CHECK(salaire > 0) CHECK(date_fin >= date_debut) \\ ===📦 3.5 Contraintes d’unicité et de non nullité === * **UNIQUE** \\ Empêche les doublons (ex : numéro de sécurité sociale) * **NOT NULL** \\ Oblige la présence d’une valeur (ex : nom d’un client) \\ ===🧮 3.6 Intégrité transactionnelle === Assurée par les propriétés ACID ^ Propriété ^ Rôle ^ | Atomicité | Tout ou rien | | Cohérence | Respect des contraintes avant/après | | Isolation | Transactions indépendantes | | Durabilité | Les données validées persistent | * **Exemple** {{ :info:bdd:exemple_integrite.png?nolink |}}