Vous êtes sur la page 1sur 4

Universit Lille1 - Master Sciences et Technologies - Mentions GSI et ASE

Bases de Donnes Relationnelles

Bases de donnes relationnelles - Travaux pratiques


MySQL sous phpMyAdmin
Toutes les manipulations sont ralises sous phpMyAdmin, une interface pour le serveur de base de donnes relationnelles MySQL. Des informations intressantes pour raliser ce TP et son compte-rendu (manuel MYSQL 5, etc.) sont disponibles sur la page http://lagis-vi.univ-lille1.fr/~lo/ens/gsi/ (ou /ase/). Pour accder phpMyAdmin, ouvrir un navigateur (Firefox, par exemple), puis aller ladresse http://localhost/phpmyadmin/. Vous tes alors sur la page daccueil permettant de crer une base. Attention : veillez respecter les noms indiqus dans cet nonc. En particulier, nutiliser ni accent ni espace dans les noms de champs sous MySQL, sous peine de compliquer la syntaxe des requtes.

Exercice 1 : Cration de la base


Dans un premier temps, nous allons crer la base de travail. Il sagit de celle dj utilise en TD. 1) En utilisant longlet Bases de donnes, crer la base base_etudiants. Si ce nom est dj utilis, donnez la base le nom que vous voulez, mais en veillant ensuite travailler avec la base que vous avez cre. 2) Dans cette base, toujours laide de linterface (onglet Structure), crer les tables conues en TD : etudiants (cl primaire num_etu) notes (cl primaire compose sur les champs _num_etu et _num_mat) matieres (cl primaire num_mat) enseignants (cl primaire num_ens ; index sur le champ nom_ens) On veillera choisir soigneusement le type de chaque champ, en slectionnant le plus appropri parmi les types disponibles sous MySQL (cf. document sur la page support du cours). Compte-rendu : indiquer, sous forme de tableau et en les justifiant, les proprits choisies pour chaque champ : type, taille/valeur, valeur par dfaut, attributs, NULL autoris ?, index, AUTO_INCREMENT.

Exercice 2 : Insertion de donnes


Le but est ici de se familiariser avec linterface du logiciel et dtudier quelques proprits des champs. 1) En utilisant longlet Insrer, saisir manuellement ltudiant n2 (dans la table approprie). Noter la prsence dun espace entre le nom et le prnom des tudiants. Compte-rendu : recopier et expliquer la requte gnre par MySQL lors de cette insertion. 2) Vrifier que lincrmentation automatique est bien fonctionnelle dans la table etudiants (proprit AUTO_INCREMENT pour la cl num_etu), en ajoutant ltudiante Favier, Isabelle, mais cette fois sans spcifier son numro. Compte-rendu : recopier et expliquer la requte gnre par MySQL lors de cette insertion, ainsi que son rsultat. 3) Interdire les doublons dans le champ nom_etu (en lui ajoutant un index UNIQUE Structure) et vrifier que cette contrainte est respecte. dans longlet

Compte-rendu : recopier et expliquer le message dlivr par MySQL lors de linsertion dun doublon pour le nom dtudiant.
1/4

Universit Lille1 - Master Sciences et Technologies - Mentions GSI et ASE

Bases de Donnes Relationnelles

Exercice 3 : Importation et exportation de donnes


On montre ici comment importer des donnes laide de linterface ou dune requte, et comment exporter une base complte destination dun autre SGBD ou dun tableur. 1) Dans longlet Importer, importer le fichier etudiant.csv ( tlcharger partir de la page des supports de cours, rubrique Base exemple, item Donnes). Ce fichier est au format ASCII, le sparateur de colonne est le caractre tabulation (not \t), et les colonnes ne sont entoures par aucun caractre particulier. Cette importation devrait gnrer une erreur ! Compte-rendu : expliquer lorigine de cette erreur, le rsultat obtenu quant au contenu de la table etudiants, et proposer comment y remdier (raliser cette manipulation). 2) Une autre faon dimporter des donnes dans une table existante est dutiliser la clause SQL : LOAD DATA INFILE 'fichier' INTO TABLE table Dans longlet SQL, raliser de cette faon limportation des 3 autres fichiers .csv correspondant aux tables autres quetudiants. Pour cela, vous avez intrt copier ces fichiers dans le rpertoire contenant la base (soit C:\wamp\bin\mysql\mysql5.5.24\data\base_etudiants\), ce qui vite de spcifier le chemin du fichier dans la requte LOAD DATA. Compte-rendu : en vous rfrant la documentation MySQL sur LOAD DATA, faire le parallle entre limportation de la table etudiants par cette mthode et celle utilise la question prcdente. 3) Dans longlet appropri, exporter le code SQL de la base complte (structure et donnes). Compte-rendu : prendre connaissance des commandes SQL contenues dans le fichier ainsi export. Commenter ce code, tout particulirement la structure des requtes CREATE TABLE. 4) On cherche cette fois exporter la base pour Excel, dune part, et pour le tableur Calc dOpenOffice (Open Document Spreadsheet), dautre part. Compte-rendu : quel format prconisez-vous dans chaque cas ? Justifiez ce choix lorsque plusieurs solutions sont possibles, comme dans le cas de lexportation pour Excel.

Exercice 4 : Slection de donnes


Nous allons ici pratiquer la slection de donnes mono-table et multi-tables grce au langage SQL. Compte-rendu : pour chaque question, reproduire le code de la (des) requte(s), en expliquant les principales difficults, en particulier celles qui sont nouvelles par rapport aux requtes prcdentes ; donner des indications permettant de vrifier si le rsultat est correct, par exemple : nombre de lignes, valeur(s) retourne(s), etc. 1) Trouver les noms et dates de naissance des tudiantes nes avant 1990. Utiliser les 2 formats de date possibles sous MySQL. 2) Trouver la note de ltudiante Favier, Isabelle en Bases de Donnes. Les champs texte, tels que le nom de ltudiant ou celui de la matire, sont-ils sensibles la casse et aux accents ? 3) Trouver le nombre dtudiants ns en 1990. On pourra pour cela utiliser la fonction YEAR(). 4) Trouver (sil y en a) les enseignants qui nenseignent aucune matire. Pour cela, on pourra formuler successivement les requtes suivantes :
2/4

Universit Lille1 - Master Sciences et Technologies - Mentions GSI et ASE

Bases de Donnes Relationnelles

retrouver les enseignants ainsi que la (les) matire(s) que chacun enseigne ; transformer la jointure de la requte prcdente en jointure externe, afin de retrouver tous les enseignants, quils enseignent ou non une matire ; ne retenir finalement que les enseignants qui nenseignent aucune matire.

5) Crer (si possible en les retrouvant vous-mmes) et excuter chacune des requtes de lexercice 7 (cf. nonc de TD). 6) Trouver les numro, nom et moyenne des tudiants de moins de 22 ans (ou dont la date de naissance est inconnue) ayant eu une note dans chacune des matires, en affichant les noms par ordre croissant.

Exercice 5 : Mise jour de donnes


Ici sont tudies de nouvelles clauses SQL, qui permettent la modification des donnes de la base. 1) Afficher la table enseignants et, grce au bouton , mettre 0 lanciennet de Bertrand, Pierre.

Compte-rendu : recopier la requte gnre par MySQL lors de cette mise jour, et en dduire la syntaxe de cette nouvelle clause. 2) En vous inspirant de la requte prcdente, formuler une requte pour mettre 0 lanciennet de tous les enseignants ayant le grade dassoci. Compte-rendu : recopier cette requte. Quel est le nombre de lignes affectes ? 3) Formuler une requte mise jour multi-tables (voir au besoin le manuel MySQL sur le bureau) pour ajouter un point toutes les notes obtenues en G.P.A.O. Compte-rendu : recopier cette requte et expliquer sa syntaxe. Quel est le nombre de lignes affectes ?

Exercice 6 : Suppression de donnes


Hormis de nouvelles clauses SQL permettant la suppression de donnes dans la base, nous abordons ici le problme de la cohrence de ces donnes. 1) Supprimer le dernier tudiant grce au bouton .

Compte-rendu : recopier la requte gnre par MySQL lors de cette suppression. En dduire la syntaxe de cette nouvelle clause. 2) En vous inspirant de la requte prcdente, supprimer toutes les tudiantes nes avant 1990. Compte-rendu : recopier cette requte. Quel problme pose-t-elle quant la cohrence des donnes de la base ? 3) Formuler une requte multi-tables permettant de supprimer toutes les informations relatives ltudiant Dupont, Charles. Compte-rendu : recopier et expliquer cette requte. Quel avantage prsente-t-elle (par rapport la prcdente) quant la cohrence des donnes de la base ? 4) Formuler une requte multi-tables permettant de supprimer les notes de ltudiant Dubois, Jules sans supprimer cet tudiant lui-mme. Compte-rendu : recopier cette requte et expliquer sa syntaxe en la comparant la prcdente. La cohrence des donnes relatives cet tudiant est-elle prserve ?
3/4

Universit Lille1 - Master Sciences et Technologies - Mentions GSI et ASE

Bases de Donnes Relationnelles

Exercice 7 : Relations entre tables


La gestion des relations est un mcanisme puissant permettant de grer lintgrit rfrentielle de la base. Il consiste contraindre une cl trangre ( foreign key , en anglais) prendre lune des valeurs de la cl primaire ( primary key ) quelle rfrence. Ce mcanisme est pris en charge par le moteur de stockage de table InnoDB (moteur par dfaut sous MySQL depuis la version 5.5.5), moyennant quelques prrequis sur les proprits des champs cls trangres. 1) ce point du T.P., la base est sans doute dans un tat incohrent suite aux manipulations des exercices 5 et 6. Rinitialiser donc cette base en supprimant toutes ses tables, puis en la recrant grce au code SQL export dans lexercice 3.3. 2) Sassurer que chaque cl trangre possde les mmes proprits (type, taille, signe) que la cl primaire quelle rfrence (faire les ventuels changements ncessaires). 3) Dans longlet Structure, grce au bouton indexe. , ajouter un index sur chaque cl trangre non encore

Compte-rendu : quels sont les champs concerns (argumenter) ? 4) En cliquant sur Vue relationnelle, dans chaque table, relier chaque cl trangre la cl primaire quelle rfrence (sans appliquer pour linstant de stratgie particulire de mise jour ou suppression). Compte-rendu : recopier et expliquer lune des requtes gnres lors de ces manipulations, ainsi que le message dlivr par MySQL lors de la mise jour et de la suppression dune cl primaire rfrence (par exemple, modifier le numro de lenseignant 15 en 25, supprimer lenseignant n10). 5) Dans la Vue relationnelle de la table enseignants, dfinir nom_ens comme colonne descriptive, puis insrer une nouvelle matire en utilisant linterface de gestion. Compte-rendu : quels changements pouvez-vous constater

laffichage des donnes de la table matieres ? lors de linsertion dune nouvelle matire ?

6) Dans la Gestion des relations de la table matieres, appliquer une mise jour en cascade de la cl trangre _num_ens. Compte-rendu : recopier et expliquer la requte gnre lors de cette manipulation. Quelle est sa consquence sur la mise jour dun numro denseignant (modifier par exemple le numro de lenseignant 15 en 25) ? 7) Supprimer lenseignant n14, puis le n10. Compte-rendu : comment sexplique la diffrence constate lors de ces suppressions ? Recopier et expliquer le message dlivr par MySQL lors de la seconde. Que se passe-t-il si lon opte pour la stratgie de suppression en cascade et que lon supprime lenseignant n10 ? 8) Tester toutes les stratgies (CASCADE, SET NULL, NO ACTION, RESTRICT) et leurs consquences sur les donnes lors dune mise jour ou dune suppression. Compte-rendu : faire une proposition globale pour la gestion des relations de la base complte afin que son intgrit rfrentielle soit gre au mieux : quelles stratgies de mise jour et de suppression proposez-vous pour chaque cl trangre, et quelle colonne descriptive choisissez-vous pour chaque table ?

4/4