[[info:bdd:accueilbdd|{{ :iconemaison.jpg?nolink&25|Sommaire Bdd}}]] ===== BDDR - MySQL - Requêtes dans la console ===== [Mise à jour le 8/3/2024] * **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:SqliteVSCode|Wiki - BDDR - SQLite dans VSCode]] * **Mots-clés** : SGBD, base, table, enregistrement, champ, requêtes, SQL. ---- ==== 1. Introduction ==== Une base de données peut être définie comme un moyen de stocker des informations de manière structurée. L’objectif d’une base de données et de permettre à des utilisateurs ou à des programmes de **partager des informations**. Grâce à un **système de gestion de base de données** (**SGBD((Un Système de Gestion de Base de Données est un logiciel qui permet de stocker des informations dans une base de données. ))**), il est possible d’ajouter des informations, de gérer plusieurs bases, de consulter les informations contenues … Le SGBD utilisé avec **PHP**((PHP (officiellement, ce sigle est un acronyme récursif pour PHP Hypertext Preprocessor) est un langage de scripts, généraliste et Open Source, spécialement conçu pour le développement d'applications web. Il peut être intégré facilement au HTML.)) est **MySQL**((MySQL est un système de gestion de bases de données relationnelles. Il est distribué sous une double licence GPL et propriétaire. Wikipédia)). Les informations contenues dans un SGBD sont **hiérarchisées** et respectent certains formats. * MySQL doit être installé sur un serveur tel qu'**Apache** sous WAMP. \\ \\ Pour **tester des requêtes SQL avec l'interface en ligne de commandes** sous Windows : \\ - Entrer le chemin vers mysql.exe dans les variables d'environnement ou se placer dans le répertoire \\ //c:\wamp64\bin\mysql\mysqlx.x.x\bin// (sous wamp) \\ - Se connecter avec la commande : **mysql -u root -p** (utilisateur //root// et pas de //mot de passe//) //Exemple// {{ :web:mysqlconsole.png?nolink |}} ==== 2. Le langage SQL ==== La communication avec un SGBD se fait avec un langage normalisé de définition et de manipulation des données et de protection d’accès : **SQL** (**Structured Query Language**). === 2.1 Principales instructions SQL === ^ Ordres SQL ^ Aspect du langage ^ |**CREATE** - ALTER - DROP - RENAME TRUNCATE |**Définition** des données| |**INSERT** - UPDATE - **DELETE** - LOCK TABLE |**Manipulation** des données| |**SELECT**|**Interrogation** des données| |GRANT - REVOKE - COMMIT - ROLLBACK - SAVEPOINT SET TRANSACTION|**Contrôle** des données| Lors de la **création** d’une **table**, il est nécessaire de définir pour chaque **champ** : son **nom** et son **type**. ===2.2 Types couramment utilisés === ^ Type MySQL ^ Type de donnée ^ Remarques ^ |**INT**|Entier|| |**FLOAT**|Réel|| |**VARCHAR**(**M**)|Texte court|M : nombre de caractères, min = 1, max = 255| |**TEXT**|texte long| | |**DATE**|Date|format jour, mois, année| |**TIME**|heure|format HH:MM:SS| === 2.3 Ecriture de commentaires === * **Source** : SQL.sh Le **double tiret** **--** et le symbole **dièse** **#** permettent de faire un commentaire jusqu’à la fin de la ligne. ** /* ** et ** */ ** permettent de faire des commentaires sur plusieurs lignes. ==== 3. Débuter avec les requêtes SQL ==== === 3.1 Extrait de la table "jeux_video" de la base "test" utilisée dans les exemples === {{ :web:extable.png?nolink |}} On utilise le Système de Gestion de Base de Données (SGDB) **MySQL** dans les exemples ci-dessous (//test//). La table //jeux_video// est téléchargeable ici. {{ :web:mysqlvers.png?nolink|}} ** Vérification de la version de mySQL** -- Entrer la commande à la suite du prompt mysql> mysql> select --version(); Ne pas oublier le **point-virgule** **;** à la fin des requêtes !!! {{ :web:create.png?nolink|}} === 3.2 Création, connexion et destruction === * **Création et destruction d'une base de données** {{ :web:infosql.png?nolink|}} //Syntaxe// CREATE DATABASE nom_base ; -- Création DROP DATABASE nom_base; -- Destruction //Exemple// CREATE DATABASE test; * **Connexion à une base de données** Cette requête doit précéder celles qui suivent. //Syntaxe// USE nom_base ; //Exemple// USE test; {{ :web:createtable.png?nolink|}} * **Création et destruction d'une table** //Syntaxe// CREATE TABLE nom_table(nom_champ1 type_champ1, nom_champ2 type_champ2, …); -- Création DROP TABLE nom_table; -- Destruction //Exemple// CREATE TABLE news( -- Ecriture en colonnes pour plus de lisibilité id INT, -- NOT NULL impose la saisie d'une valeur titre VARCHAR(255) NOT NULL, contenu TEXT NOT NULL); === 3.3 Manipulation des données === * **Mots-clés** : INSERT INTO , VALUES, DELETE, FROM, WHERE, UPDATE, SET {{ :web:insertinto.png?nolink|}} * **Insertion d'une entrée dans une table** //Syntaxe// INSERT INTO nom_table (champ1, champ2,..., champn) VALUES('val_champ1', 'val_champ2', …,val_champn) ; ou INSERT INTO nom_table VALUES('val_champ1', 'val_champ2', …,val_champn) ; //Exemple// INSERT INTO jeux_video(nom, possesseur, console, prix, nbre_joueurs_max, commentaires) VALUES('Battlefield 1942', 'Patrick', 'PC', 45, 50, '2nde guerre mondiale'); //Résultat dans la console// : Query OK, 1 row affected (0.00 sec) //Résultat dans phpMyAdmin// : ajout de l'entrée 52 à la fin de la table {{ :web:ex3table.png?nolink |}} {{ :web:deletefrom.png?nolink|}} * **Suppression d'une entrée dans une table** //Syntaxe// DELETE FROM nom_table WHERE nom_champ = valeur ; DELETE FROM jeux_video WHERE nom='Battlefield 1942'; //Résultat dans la console// : Query OK, 1 row affected (0.00 sec) {{ :web:update.png?nolink|}} * **Modification d'une ou plusieurs entrées dans une table** //Syntaxe// UPDATE nom_table SET champ1=val_champ1, champ2=val_champ2, …,champn=val_champn) WHERE condition ; //Exemple// UPDATE jeux_video SET prix = 10, nbre_joueurs_max = 32 WHERE ID = 51; //Résultat dans la console// : Query OK, 1 row affected (0.00 sec) //Résultat dans phpMyAdmin// : modification de l'entrée 51 {{ :web:ex4table.png?nolink |}} === 3.4 Interrogation des données === * **Mots-clés** : SELECT, FROM, WHERE, ORDER BY (DSC), LIMIT L'une des commandes les plus importantes de SQL utilise le triplet SELECT-FROM-WHERE qui permet de rechercher des informations au sein des tables d'une base de données. // Synthaxe// **SELECT** //expression// \\ **FROM** //table(s)// \\ [**WHERE** //conditions//] {{ :web:selectfrom.png?nolink|}} * **Lecture** de l'ensemble des champs et de l'ensemble des enregistrements d'une table //Syntaxe// SELECT * FROM ; -- * extrait toutes les colonnes de la table //Exemple// SELECT * FROM jeux_video; //Résultat partiel dans la console// {{ :web:requete1.png?nolink |}} * **Lecture** d’un sous-ensemble des champs et de l’ensemble des enregistrements d'une table //Syntaxe// SELECT champ1, champ2,...,champn FROM ; //Exemple// SELECT nom, commentaires FROM jeux_video; //Résultat partiel dans la console// {{ :web:requete2.png?nolink |}} * **Lecture** d’un sous-ensemble des champs d’une sélection des enregistrements, sélection selon une condition //Syntaxe// SELECT champ1, champ2,...,champn FROM nom_table WHERE condition; //Exemple// SELECT nom,commentaires,prix FROM jeux_video WHERE prix<30; //Résultat partiel dans la console// {{ :web:requete3.png?nolink |}} * **Lecture** d’un sous-ensemble **ordonné** des champs d’une sélection des enregistrements, sélection selon une condition //Syntaxe// SELECT champ1, champ2,...,champn FROM WHERE nom_champ = condition ORDER BY champ(s); //Exemple// SELECT select nom,commentaires,prix FROM jeux_video WHERE possesseur='Florent' ORDER BY prix; //Résultat partiel dans la console// {{ :web:requete4.png?nolink |}} * **Lecture** d’un sous-ensemble **ordonné** et **limité** des champs d’une sélection des enregistrements, sélection selon une condition //Syntaxe// SELECT champ1, champ2,...,champn FROM WHERE nom_champ = condition ORDER BY champ(s); //Exemple// SELECT select nom,commentaires,prix FROM jeux_video WHERE possesseur='Florent' ORDER BY prix LIMIT 0,10; //Résultat dans la console// {{ :web:requete5.png?nolink |}} === 3.5 Créer un utilisateur === //Syntaxe// -- Création de l'utilisateur CREATE USER nom_utilisateur@url IDENTIFIED BY 'password'; -- Affectation des droits GRANT SELECT, INSERT, UPDATE,DELETE ON nom_base.* TO nom_utilisateur@url; //Exemple// -- Création de l'utilisateur CREATE USER db_utilisateur@localhost IDENTIFIED BY '12345678'; -- Affectation des droits GRANT SELECT, INSERT, UPDATE,DELETE ON coureurs.* TO db_utilisateur@localhost; === 3.6 Contrôle des données === A rédiger {{ :web:220px-phpmyadmin_logo.png?nolink&120|}} ==== 4. phpMyAdmin ==== Pour **simplifier la gestion des bases**, il existe un outil accessible au travers d’un serveur web, développé en PHP : phpMyAdmin. ---- ==== Résumé ==== * Les requêtes SQL commençant par **SELECT** permettent de récupérer des informations dans une base de données. * Le langage SQL propose de nombreux outils pour préciser nos requêtes, à l'aide notamment des mots-clés **WHERE**(filtre), **ORDER BY**(tri) et **LIMIT**(limitation du nombre de résultats).