Nom : TP de SQL Premiers pas Contrôle qualité : 3 Conception et Analyse Schéma de la base Normalisation (si vue en cours) Non-normalisation (si vue en cours) Analyse Codage Validation 4 - Vérifications de base Lancer le serveur Lancer le client Vérification numéro version 5 - Création de la base Création de la base Création des tables Insertion des données INSERT Insertion des données LOAD Observations : Creative Commons - LAXENAIRE Olivier page 1 sur 8
1 - Où allons-nous? TP de SQL Premiers pas 1.1 - Cahier des charges : Nous voulons réaliser une base de données et mettre en oeuvre les différents types de commandes (création, vérification, sélection). 1.2 - Cahier des charges Nous désirons créer une base de données pour la gestion d'un parc d'automobiles destinées à la location. Les locations peuvent se faire à la semaine ou au jour. Les clients sont référencés par leur nom et leur prénom. Les véhicules sont de type "berline", "sportive", "utilitaire" ou "monospace". Il sera également nécessaire de garder un historique des prêts pour l'envoi des factures à la fin du mois. 2 - Marche à suivre Nous devons Concevoir notre modèle avant de le mettre en oeuvre, Nous assurer de l'installation correcte de la base de données, Créer la base de données, Créer les tables de la base de données, Insérer des données (voir les annexes fournies), Demander des informations à la base. 3 - Naissance de la base Question 3.1 : Créer le modèle de cette base de données Modélisation classique Créer les tables Créer les champs Créer les relations Modélisation UML (si vue en cours) Créer les classes (entités) Créer les attributs (champs) Créer les relations Question 3.2 : Vérifier que les trois formes normales sont bien vérifiées. Question 3.3 : Une des tables peut ne pas vérifier les trois formes normales. Laquelle et pourquoi? Creative Commons - LAXENAIRE Olivier page 2 sur 8
4 - MySQL, ça marche ou pas? Console Etapes Linux Windows Environnement de commande Terminal fenêtre DOS Toutes les tâches ps -ax ctrl + alt + del Serveur MySQL lancé? ps -aux grep mysqld / Lancer le serveur (si nécessaire) mysqld start mysql.exe Lancer un client MySQL (*) CLIENT MYSQL A l'invite du client MySQL, vérifier la version du serveur (**) A l'invite du client MySQL, vérifier l'utilisateur actuel (**) mysql -u root [-p 'MotDePasse'] remarque : [-p 'MotDePasse'] est optionnel! SELECT VERSION(); SELECT USER(); (*) Si une réponse est donnée, le système est fonctionnel, sinon, il faut déclarer au moins un utilisateur (voir le document annexé). (**) Attention à la casse. Question 4.1 : Donner l'emplacement de la commande lançant le serveur (avec Linux, voir la commande 'ps' ). Question 4.2 : Donner l'emplacement de la commande lançant le client,(avec Linux, voir la commande 'ps' ), Question 4.3 : Donner la version de MySQL installée. 5 - Créons! Un fois le client MySQL lancé, nous allons pouvoir créer notre base et ses tables, puis y insérer nos données. 1 - Création de la base Question 5.1 : En mode 'console', créer la base de données avec l'instruction "CREATE". Donner la syntaxe exacte employée. Question 5.2 : En mode 'console', donner la commande permettant de vérifier le nom des bases présentes dans le système. Creative Commons - LAXENAIRE Olivier page 3 sur 8
2 - Création des tables Question 5.3 : En mode 'console', créer les tables grâce à l'instruction "CREATE". Donner la syntaxe exacte employée pour une des tables. Question 5.4 : En mode 'console', donner la commande permettant de vérifier les tables présentes dans le système. 3 - Insertion des données Il existe au moins deux méthodes différentes d'insertion de données. La première consiste à utiliser de manière répétitive la commande "INSERT". Cela devient vite fastidieux pour de nombreux enregistrements. La seconde consiste à employer la commande "LOAD DATA" qui utilise un fichier texte contenant les données à insérer. Question 5.4 : Première méthode : en mode 'console', remplir une des tables avec un série d'instructions "INSERT". Donner la syntaxe exacte employée. Question 5.4 : Seconde méthode : créer un fichier texte, avec des champs séparés par des ';' et des lignes terminées par '\n' (pour Linux) ou '\r\n' (pour windows) pour remplir la table. Donner le fichier texte ainsi créé. En mode 'console', utiliser ensuite la syntaxe 'LOAD DATA' pour insérer les données dans une des autres tables. Donner la syntaxe exacte de l'instruction 'LOAD DATA' Creative Commons - LAXENAIRE Olivier page 4 sur 8
ANNEXE Les véhicules id_vehicule Type de véhicule Immatriculation 1 berline 001 BJN 25 2 sportive 002 BJN 25 3 utilitaire 003 BJN 25 4 monospace 004 BJN 25 5 monospace 005 BJN 25 Les clients Nom Dujardin MouDuGenou EncorEuTilFalluQueJeLeSus La poignée Henry Aglaé Alex Ed Prénom Les locations Nom Véhicule Location Dujardin 001 BJN 25 3 jours MouDuGenou 002 BJN 25 1 semaine EncorEuTilFalluQueJeLeSus 003 BJN 25 1 jour Ed La poignée 004 BJN 25 4 jours Dujardin 005 BJN 25 3 jours MouDuGenou 001 BJN 25 2 semaines EncorEuTilFalluQueJeLeSus 002 BJN 25 1 jours Ed La poignée 003 BJN 25 9 jours Dujardin 004 BJN 25 1 jour Creative Commons - LAXENAIRE Olivier page 5 sur 8
ANNEXE 2 Commandes de MySQL Client/Serveur MySQL Mode "MS-DOS" 1 - Pour démarrer le serveur de mysql: mysqld 2 - Pour démarrer un client mysql: mysql -u root Mode "Linux" 1a - Tester le serveur : ps aux grep mysqld 1b- Lancer le serveur (si nécessaire) mysqld start Remarque : /L'option -u correspond à l'utilisateur rrot. 3 - Nous sommes ici en mode moniteur. Nous pouvons tester différentes commandes: SELECT now(); SELECT user(); SELECT version(); Créer et sélectionner une base 1 - Connaître les noms des différentes bases utilisées: SHOW DATABASES; 2 - Créer une base: CREATE database nomdelabase; 3 - Utiliser cette base: USE nomdelabase; 4 - Voir les tables d'une base de données : SHOW TABLES; Les tables: création/destruction 1 - Creation d'une table 'nomdelatable' : CREATE TABLE nomdelatable ( clefprimaire int NOT NULL AUTO_INCREMENT, clefexterne int REFERENCES tableexterne(clefext), nomcolonne1 CHAR(50), nomcolonne2 INT, PRIMARY KEY(clefPrimaire) ); 2 - Pour voir si la table à bien été créée : SHOW TABLES; 3 - Pour voir les champs de la table «nomdetable» : DESCRIBE nomdetable; 4 - Pour supprimer une table: DROP TABLE nomdelatable; Creative Commons - LAXENAIRE Olivier page 6 sur 8
Insertion, suppression de données 1 - Insérer des données dans une table: INSERT INTO nomdetable (champ1, champ2, champ3) VALUES (val1, val2, "texte1"); ou INSERT INTO nomdetable ( champ1, champ2, champ3) VALUES (val1, val2, "texte1"), (val3, val4, "texte2") ; 2 - Insérer des données commençant par 'Z' d'une table vers une autre table: 2.1 - Créer une table 'nomdetablebis' INSERT INTO nomdetablebis SELECT champ1, champ2, champ3 FROM nomdelatable WHERE champ1 LIKE "Z%" 3 - Suppression d'une valeur dans une table: DELETE FROM nomdelatable WHERE champ1="toto"; // METHODE POUR UNE GRANDE QUANTITE DE DONNEES - Lorsque vous démarrez d'une table vierge, une façon simple de la remplir est de créer un fichier «texte» contenant une ligne pour chaque ensemble de données, puis de le charger dans la table avec une instruction simple. Vous pouvez créer un fichier «donnees.txt» contenant un enregistrement par ligne, chaque donnée de l'enregistrement étant séparée par une tabulation. Les données doivent être dans le même ordre que celui indiqué par l'ordre CREATE TABLE. Pour les valeurs manquantes (ou inconnues), vous pouvez utilisez la valeur NULL, que nous représentons par \N dans le fichier texte. // Exemple d'une table contenant les champs : NOM PROPRIETAIRE ESPECE SEXE NAISSANCE MORT Joe Dupont oiseau \N 2003-12-01 \N // CHARGER LE FICHIER AVEC LES DONNEES Pour charger le fichier texte dans la table, il suffit d'utiliser la commande : mysql> LOAD DATA LOCAL INFILE "./fichier.txt" INTO TABLE matable; // SYNTAXE ALTERNATIVE de 'LOAD DATA' Il est également possible de spécifier des séparateurs entre chaque champs et des terminateurs pour les lignes, comme indiqué dans l'exemple suivant : mysql> LOAD DATA INFILE './data.txt' INTO TABLE nomdetable -> FIELDS TERMINATED BY ',' ENCLOSED BY '"' -> LINES TERMINATED BY '\n'; Creative Commons - LAXENAIRE Olivier page 7 sur 8
Instruction 'LOAD DATA' LOAD DATA [LOW_PRIORITY CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY '\t'] [[OPTIONALLY] ENCLOSED BY ''] [ESCAPED BY '\\' ] ] [LINES [STARTING BY ''] [TERMINATED BY '\n'] ] [IGNORE number LINES] [(col_name,...)] Extractions d'attributs dans une table (projections) 1 - Afficher tous les champs d'une table: SELECT * FROM nomdelatable; 2 - Afficher certains champs d'une table: SELECT champ1, champ2 FROM nomdelatable; Chercher des attributs dans une table (selections) 1 2 24 champ1 champ2 champ3 champ4 champ5 10 20 240 100 200 2400 "un" "deux" "vingt-quatre" 100 200 240 SELECT * FROM nomdelatable where champ4 ="un"; Résultats d'exécution: champ1 champ2 champ3 champ4 champ5 1 10 100 "un" 100 SELECT champ4 FROM nomdelatable WHERE champ5 >199; Résultats d'exécution: champ4 "deux" "vingt-quatre" Creative Commons - LAXENAIRE Olivier page 8 sur 8