Chapitre 4 Introduction à SQL Au fond, est-ce que ranger ça ne revient pas un peu à foutre le bordel dans son désordre? Philippe Geluck 4.1 Installation de MySQL Pour télécharger MySQL avec l'installateur (MSI Installer), vous pouvez vous rendre sur le site suivant : http://dev.mysql.com/downloads/mysql/#downloads. Plutôt que de choisir la toute dernière version 5.6.10 (176 Mo tout de même), nous nous contenterons de la version 5.5.30 (31 Mo). Vériez que la version sélectionnée est bien Microsoft Windows et cliquez sur Download. Vous allez être redirigé vers une page vous proposant de créer un compte d'utilisateur ; descendez en bas de la page et cliquez sur No thanks, just start my download. Exécutez le chier téléchargé ; l'installateur démarre et vous guide lors de l'installation. Lorsqu'il vous demande de choisir entre trois types d'installation, choisissez Typical. Cela installera tout ce dont nous allons avoir besoin. 39
40 CHAPITRE 4. INTRODUCTION À SQL Cliquez sur next, l'installation se lance. Une fois qu'elle est terminée, cliquez sur Terminer après vous être assurés que la case lancer l'outil de configuration MySQL est cochée. Dans cet outil de conguration, choisissez la conguration standard et, à l'étape suivante, cochez l'option Include Bin Directory in Windows PATH. On vous propose alors de dénir un nouveau mot de passe pour l'utilisateur root (root signie racine, l'utilisateur root dispose de tous les privilèges d'administration). Choisissez un mot de passe et conrmez-le. ATTENTION : assurez-vous de ne pas oublier ce mot de passe! Ne cochez aucune autre option à cette étape. Cliquez ensuite sur Execute pour lancer la conguration. MySQL est maintenant installé et prêt à être utilisé! 4.2 Organisation d'une base de données Généralement, une base de données s'organise de la manière suivante : BASE DE DONNEES/DATABASE TABLE(S)/TABLE(S) CHAMPS/FIELD(S) VALEUR(S)/VALUE(S) Les éléments d'une base de données sont rangés en tables, qui elles-mêmes contiennent des champs qui peuvent avoir plusieurs valeurs. Par exemple, on pourrait imaginer une base de données des Élèves-ingénieurs contenant la table des Grandes Écoles ; chaque école aurait autant de champs que de promotions et, à l'intérieur de chaque champ, les valeurs représenteraient les noms, prénoms et adresses des élèves.
4.3. CONNEXION À MYSQL 41 4.3 Connexion à MySQL Pour se connecter, lancer l'invite de commande (Menu démarrer cmd Entrer ). Les champs à renseigner sont : le client (ici le client est MySQL) l'hôte (la base de données est accessible directement depuis votre machine : localhost) l'utilisateur (choisissez l'utilisateur root an de disposer de tous les droits) le mot de passe (password de l'utilisateur root conguré auparavant) Ainsi, une connexion complète peut s'écrire de la manière suivante : mysql -h localhost -u root -ppassword ATTENTION : ne pas mettre d'espace entre la directive -p et votre mot de passe. Vous pouvez également utiliser MySQL 5.5 Command Line Client qui a été créé dans la liste de vos programmes. Pour vous déconnecter, il sut de rentrer la directive quit ou \q ou encore exit dans votre invite de commande. Avant de voir les principales directives de MySQL que nous allons appliquer à la base de données isen, nous allons créer un utilisateur secondaire, ayant des droits limités, an d'éviter que vous ne supprimiez des tables préalablement existantes. Pour ce faire, connectez-vous avec l'utilisateur root, comme indiqué précédemment, et entrez ensuite les directives : GRANT ALL PRIVILEGES ON isen.* TO 'user'@'localhost' IDENTIFIED BY 'motdepasse'; GRANT ALL PRIVILEGES ON isen.* : alloue tous les droits sur la base de données isen. TO 'user'@'localhost' : crée un nouvel utilisateur pouvant se connecter à la base de données via l'adresse locale (remplacer user par n'importe quel nom). IDENTIFIED BY 'motdepasse' : crée le mot de passe du nouvel utilisateur. Ensuite déconnectez-vous (pour changer d'utilisateur) en utilisant la commande quit, puis reconnectez-vous avec votre nouvel utilisateur : mysql -h localhost -u user -pmotdepasse 4.4 Syntaxe SQL et premières commandes À partir de l'invite de commandes, vous pouvez réaliser toutes les opérations sur votre base de données. Il est recommandé, mais pas obligatoire, d'écrire les commandes en majuscules. Les commandes se terminent par ; ; pour annuler une ligne en cours de saisie, tapez \c. On peut acher le statut du serveur à l'aide de : SHOW STATUS; et on peut vérier son compte utilisateur à l'aide de SELECT USER(); Création et sélection d'une base de données Les commandes élémentaires permettant de créer cette base de données sont : création d'une nouvelle base de données isen (sans la sélectionner) : CREATE DATABASE isen; sélection de la base isen (ici le ; est facultatif) : USE isen; ou bien connexion à MySQL et sélection directe de la base :
42 CHAPITRE 4. INTRODUCTION À SQL mysql -h localhost -u user -pmotdepasse isen liste des bases de données : SHOW DATABASES; suppression d'une base de données : DROP DATABASE isen; Création, insertion et modication d'une table Considérons, par exemple, la table cir2 constituée par les élèves ci-dessous : Prénom Nom Age E-mail Tim AURIOL 21 tim.auriol@isen.fr Amir BELGHIT 21 amir.belghit@isen.fr Benjamin BERTHEVAS 19 benjamin.berthevas@isen.fr Kévin CERDAN 20 kevin.cerdan@isen.fr Corentin DELCOURT 18 corentin.delcourt@isen.fr Alexis HELLOUIN DE MENIBUS 22 alexis.hellouin-de-menibus@isen.fr Khaled JAFFAL 20 khaled.jaal@isen.fr Etienne JEZEQUEL 19 etienne.jezequel@isen.fr Maxime LEBEURIER 21 maxime.lebeurier@isen.fr Mickaël L'HARIDON 19 mickael.l-haridon@isen.fr Guy-Yann MORVAN 20 guy-yann.morvan@isen.fr Yannis OZAROWSKI 22 yannis.ozarowski@isen.fr Hugo ROIGNANT 21 hugo.roignant@isen.fr Mathieu SINIC 19 mathieu.sinic@isen.fr Mathieu THOULOUSE 21 mathieu.thoulouse@isen.fr Romain VAUDOUR 20 romain.vaudour@isen.fr Pierre ZEMB 21 pierre.zemb@isen.fr La table cir2 Les commandes élémentaires permettant de créer cette table sont : création d'une nouvelle table cir2 : CREATE TABLE cir2 (Prenom VARCHAR(30), Nom VARCHAR(30), Age INT(3), Email VARCHAR(30)); achage des tables de la base courante : SHOW TABLES; ajout d'un champ : ALTER TABLE cir2 ADD Sexe CHAR; retrait d'un champ : ALTER TABLE cir2 DROP Sexe; modication du nom d'un champ : ALTER TABLE cir2 CHANGE Email Courrier VARCHAR(30); achage de la structure de la table : DESCRIBLE cir2; chargement d'un chier directement dans une table : si l'on dispose d'un chier listecir2.txt contenant tous les élèves au format : "Tim" Tab "Auriol" Tab 21 Tab "tim.auriol@isen.fr" \r\n on peut le charger dans la table cir2 avec : LOAD DATA LOCAL INFILE '/path/listecir2.txt'into TABLE cir2 LINES TERMINATED BY '\r\n'; - une valeur nulle (NULL) s'écrit : \N dans le chier. - en cas d'erreur dans le chier, on peut le corriger, eacer la table (sans la supprimer) : DELETE FROM cir2; et la recharger.
4.4. SYNTAXE SQL ET PREMIÈRES COMMANDES 43 ajout d'une valeur (i.e. une ligne) : INSERT INTO cir2 VALUES ("François", "KANY", 42, "kanyfrancois@hotmail.com"); correction d'une valeur : UPDATE cir2 SET Age = 43 WHERE Nom = "KANY"; suppression d'une valeur : DELETE FROM cir2 WHERE Nom="KANY"; achage de toute la table : SELECT * FROM cir2; (* permet de pointer sur toutes les entrées). suppression de la table : DROP TABLE cir2; Recherche dans une base de données Les commandes élémentaires permettant de réaliser ces opérations sont : sélection d'une ligne : SELECT * FROM cir2 WHERE Nom = "Auriol"; sélection de plusieurs lignes : SELECT * FROM cir2 WHERE Age = 21; sélection de lignes suivant plusieurs critères : SELECT * FROM cir2 WHERE Age = 21 AND Prenom = "Mathieu"; les mots clés AND et OR permettent d'exécuter plusieurs requêtes en une seule commande. ( AND est prioritaire sur OR si l'on n'utilise pas de parenthèses pour regrouper les opérateurs). sélection d'une colonne : SELECT Nom FROM cir2; sélection de plusieurs colonnes : SELECT Nom, Prenom FROM cir2; sélection d'une colonne en évitant les doublons : SELECT DISTINCT Prenom FROM cir2; (Mathieu n'apparaît qu'une fois). sélection d'une colonne croisée avec un critère sur les lignes : SELECT Prenom FROM cir2 WHERE Age=21; tri des lignes par ordre croissant : SELECT Nom FROM cir2 ORDER BY Age; (ou BY Age DESC; pour un tri décroissant). sélection suivant un modèle : SELECT * FROM cir2 WHERE Nom LIKE "A%"; (tous les noms qui commencent par "A" ou "a") ; LIKE "%A"; (qui nissent par "A" ou "a") ; LIKE "%A%"; (qui contiennent "A" ou "a"). SELECT * FROM cir2 WHERE Nom REGEXP "^A"; (tous les noms qui commencent par "A" ou "a") ; REGEXP "A$"; (qui nissent par "A" ou "a") ; REGEXP "^.A"; (dont la deuxième lettre est "A" ou "a") ; REGEXP BINARY "^a"; (dont la première lettre est exactement "a"). comptage du nombre de lignes : SELECT COUNT(*) FROM cir2; Concept de clé primaire PRIMARY KEY : attribue un identiant id unique à un élément d'une base de données ; ce qui permet de diérencier deux entrées qui auraient exactement les mêmes attributs. Cet identiant s'appelle la clé primaire. On peut l'attribuer manuellement ou automatiquement à l'aide de id INT NOT NULL AUTO_INCREMENT, Voici le code pour la table cir2. CREATE TABLE cir2 (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id), Prenom VARCHAR(30), Nom VARCHAR(30), Age INT(3), Email VARCHAR(30));
44 CHAPITRE 4. INTRODUCTION À SQL On doit alors entrer : INSERT INTO cir2 VALUES (1,"Tim", "Auriol", 21, "timauriol@isen.fr"); ou bien : INSERT INTO cir2 VALUES (NULL,"Tim", "Auriol", 21, "timauriol@isen.fr"); Concept de clé étrangère Une clé étrangère sert à créer des liens entre diérentes tables. Soient A et B deux tables indexées par leurs clés primaires respectivement a et b. b est une clé étrangère pour A (et réciproquement), on l'indique par le mot clé REFERENCES. Par exemple, créons la table des TD d'informatique de ce livre. Pour lier cette table à leurs auteurs, il faut écrire : CREATE TABLE tdinfo ( id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (id), Intitule VARCHAR(255), Langage ENUM ("Mathematica","Python"), Programmeur INT NOT NULL REFERENCES cir2(id)); INSERT INTO cir2 VALUES (NULL,"Khaled", "JAFFAL",20, "khaled.jaffal@isen.fr"); SELECT @last:=last_insert_id(); INSERT INTO tdinfo VALUES (NULL,"Sudoku","Python",@last), INSERT INTO tdinfo VALUES (NULL,"pH","Python",@last); INSERT INTO cir2 VALUES (NULL,"Corentin", "DELCOURT", 18, "corentin.delcourt@isen.fr"); SELECT @last:=last_insert_id(); INSERT INTO tdinfo VALUES (NULL,"RSA", "Python",@last), INSERT INTO tdinfo VALUES (NULL,"Transformee de Fourier","Python",@last); Ainsi, SELECT * FROM tdinfo; permet de visualiser les intitulés et les langages avec les identiants des programmeurs tels qu'ils apparaissent dans la table cir2.