SPARQL Protocol and RDF Query Language/Travail pratique/Initiation à MySQL
Pourquoi installer MySQL ?
modifierDans ce TP, nous allons installer MySQL dans notre serveur Web. Ce logiciel permet de créer des bases de données SQL. Cela nous sera utile pour comparer nos exemples de programmes entre SPARQL et SQL.
À savoir avant de commencer
modifierQue fait MySQL ?
modifierC'est un logiciel qui stocke des données d'autres applications Web ou non.
Les applications ont comme contrainte d’utiliser le langage SQL pour lire ou pour enregistrer des données en passant par le protocole de la base de données utilisée.
Ces protocoles sont indolores (et même invisibles) pour les développeurs qui développent avec une base de données sous leur contrôle. Mais, dès lors qu’il y a partage de données entre services différents, les choses se compliquent et c’est là que SPARQL règle les problèmes. Ceci est une autre histoire, pour le moment nous installons MySQL pour illustrer nos exemples SPARQL et nous ne configurons pas PHPMyAdmin dans ce TP, car SQL n’est pas le sujet principal des TP.
Que fait PHPmyAdmin ?
modifierIl vous faut avoir fait le TP précédent pour avoir un serveur Web avec PHP.
MySQL n'a pas besoin d'un serveur web pour fonctionner mais nous allons utiliser le logiciel PHPmyAdmin pour l'administrer à distance.
PHPmyAdmin est une interface de gestion de MySQL écrit en PHP qui a donc besoin du serveur que nous avons installé.
Documentations
modifierCours sur SQL
modifierLes cours sur SQL dans Wikiversité sont déjà bien avancés, lisez-les si vous en avez le temps. Les TP ne feront que survoler les concepts de base.
Le site officiel de PHP
modifierLe site officiel de PHP est extrêmement bien fait. La documentation PHP/MySQL est accessible depuis l'URL : http://php.net
N'oubliez pas de consulter les commentaires utilisateurs, car de très nombreux commentaires donnent des conseils très utiles. La documentation complète de PHP est disponible en français à l’adresse : http://www.php.net/manual/fr/
Installation de MySQL
modifierNous commençons par installer les paquets :
- mysql-server pour installer le serveur MySQL
- php5-mysql pour les outils de communication entre PHP5 et MySQL
- phpmyadmin pour l'outil d'administration à distance de MySQL
Suivre les instructions suivantes :
1. Taper ces commandes
Sous Ubuntu
sudo apt-get install mysql-server php5-mysql phpmyadmin
Sous Fedora ou CentOS
yum install mysql-server php-mysql phpmyadmin
2. MySQL vous demandera le mot de passe de l’utilisateur root du serveur MySQL (à conserver).
3. PHPMyAdmin va vous demander :
- « Où installer le serveur HTTP ? » Choisir Apache.
- « Voulez-vous configurer PHPMyAdmin ? » Choisir Oui.
- « Indiquez le mot de passe root du serveur MySQL. » Indiquer le mot de passe que vous avez indiqué pour MySQL.
Configuration du serveur
modifier1. Configuration du mot de passe : Sous Ubuntu (à vérifier)
sudo mysql_secure_installation
Sous Fedora ou CentOS
sudo mysql_secure_installation
2. Activation du service : Sous Ubuntu(à retrouver)
Sous Fedora ou CentOS
sudo service mysqld start
sudo chkconfig mysqld on
4. Recharger la configuration sur service apache2 :
Sous Ubuntu
sudo service apache2 reload
Sous Fedora ou CentOS
sudo service httpd reload
5. Tester l’accès au service PhpMyadmin :
firefox http://localhost/phpmyadmin
PhpMyAdmin vous demande un login et un mot de passe :
- root
- votre mot de passe root mysql
En production, il vaut mieux activer, en cas de besoin, le service HTTP PHPMyAdmin et le désactiver ensuite.
Pour l'activer :
sudo unlink /etc/apache2/conf.d/phpmyadmin.conf
sudo service apache2 reload
Pour le désactiver :
sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf.d/phpmyadmin.conf
sudo service apache2 reload
Pour plus d'info pour Fedora ou CentOS : http://doc.fedora-fr.org/wiki/Installation_et_configuration_de_MySQL#Installation_et_configuration_de_MySQL
Exercice avec Docker : Créer une image Docker avec les TP précédents avec MariaDb, PHPMyAdmin avec sur la page Web par défaut un lien permettant d'ouvrir PHPMyAdmin sans mot de passe.
Ma première base de données
modifierPour nos futurs TP nous allons utiliser la base de données que nous allons fabriquer. Nous allons enregistrer des CVs dans notre base de données MySQL.
La base de données
modifierPour commencer, lisez l’introduction de la leçon sur SQL de Wikiversité.
À faire avant de poursuivre : : créer la base de données moncv avec l'interface PHPMyAdmin. Nous considérons que, dans les prochaines étapes, vous aurez sous les yeux l'interface d'administration de votre base de données moncv.
Les tables
modifierIl nous faut 2 tables :
- une table pour enregistrer la liste des CVs
- une autre table pour enregistrer toutes les Experiences de tous les CVs
Nous n'utiliserons pour nos exemples que 4 types de données :
- INT : nombre entier
- VARCHAR : chaîne de caractères dont le nombre varie avec un maximum défini
- DATE : une date (qui prend cette forme YYYY-MM-DD)
- BOOLEAN : 0 (faux) ou 1 (vrai)
Nous utiliserons l'outil d'auto-incrémentation (AI) qui nous permettra d’auto-incrémenter les identifiants des objets dans la base de données.
Exercice : Créer avec PhpMyAdmin les deux tables suivantes.
Le "Storage Engine" des tables doit être InnoDB. Ce détail vous sera demandé dans le formulaire de création des tables.
Table 1 : CVs
Nom du champ | Type | Auto-incrémenté | Taille/longueur |
---|---|---|---|
ID | INT | AI | |
nom | VARCHAR | 25 | |
prenom | VARCHAR | 25 | |
adresse | VARCHAR | 50 | |
code_postal | INT | ||
ville | VARCHAR | 25 | |
telephone | VARCHAR | 25 |
Table 2 : Experiences
Nom du champ | Type | Auto-incrémenté | Taille/longueur |
---|---|---|---|
ID | INT | AI | |
ID_CV | INT | ||
date_debut | DATE | ||
date_fin | DATE | ||
poste | VARCHAR | 50 | |
societe | VARCHAR | 25 | |
description | VARCHAR | 200 | |
mots_cles | VARCHAR | 100 | |
poste_actuel | BOOLEAN |
Voici, pour information, le code SQL que PhpMyAdmin vous a évité d'écrire vous-même :
CREATE TABLE `moncv`.`CVs` (
`ID` INT NOT NULL AUTO_INCREMENT ,
`nom` VARCHAR( 25 ) NOT NULL ,
`prenom` VARCHAR( 25 ) NOT NULL ,
`adresse` VARCHAR( 50 ) NOT NULL ,
`code_postal` INT NOT NULL ,
`ville` VARCHAR( 25 ) NOT NULL ,
`telephone` VARCHAR( 25 ) NOT NULL ,
PRIMARY KEY ( `ID` )
) ENGINE = InnoDB;
CREATE TABLE `moncv`.`Experiences` (
`ID` INT NOT NULL AUTO_INCREMENT ,
`ID_CV` INT NOT NULL ,
`date_debut` DATE NOT NULL ,
`date_fin` DATE NOT NULL ,
`poste` VARCHAR( 50 ) NOT NULL ,
`societe` VARCHAR( 25 ) NOT NULL ,
`description` VARCHAR( 200 ) NOT NULL ,
`mots_cles` VARCHAR( 100 ) NOT NULL ,
`poste_actuel` BOOLEAN NOT NULL ,
PRIMARY KEY ( `ID` )
) ENGINE = InnoDB;
Contrainte d'intégrité
modifierLa seule façon certaine de distinguer deux CVs est la comparaison de leur ID (identification data), car il peut exister deux CVs de la même personne.
Pour convoquer un enregistrement, ou un morceau d'enregistrement, on passera donc toujours par l'ID. Chaque enregistrement a généralement un ID que l’on nomme clé d'enregistrement.
La table Experiences, elle aussi, a une clé, mais elle utilise aussi la clé d'une autre table. On appelle cette autre clé « une clé étrangère ».
Une clé étrangère peut être contrôlée dans MySQL. Cela évite de créer des clés étrangères qui ne pointent sur aucun enregistrement et cela évite de supprimer des enregistrements dans d'autres tables car leurs clés sont encore utilisées.
Étape 1 : il faut faire du champ ID_CV un index, car un index optimise le traitement sur cette colonne et c’est indispensable pour en faire une clé étrangère.
- Cliquer sur le nom de la table "Experiences" dans la colonne de gauche. La structure de la table s'affiche.
- Cocher la ligne ID_CV
- Cliquer sur l’icône Index en bas du tableau de la structure (l'icône contient un éclair, passer le curseur de votre souris dessus pour afficher la signification des icônes).
Étape 2 : Indiquer qu'ID_CV contiendra une clé étrangère.
- Cliquer sur le nom de la table "Experiences" dans la colonne de gauche. La structure de la table s'affiche.
- Cliquer sur le lien Relation view
- Sur la ligne ID_CV dans la colonne "Foreign Key", sélectionner dans la liste moncv.CVs.ID
- Sauver.
Enregistrer des données
modifierNous allons insérer 2 CVs à la main à travers les formulaires de PhpMyAdmin.
Exercice: Insertion de deux CVs
- À gauche, dans votre arborescence, sélectionnez la table CVs.
- Vous devez voir la structure de votre table qui s'affiche sous la forme d'un tableau. Cliquez sur 'Insert' (insérer) dans le menu du haut.
- Par défaut, PHPMyAdmin vous affiche un formulaire d'insertion avec deux entrées.
- Laissez toujours le champ ID vide. Il se remplit automatiquement.
- Et remplissez les autres champs.
- Sauvegardez et notez les ID des CVs (normalement : 1 et 2).
Voici, pour information, ce que PhpMyAdmin vous a évité d'écrire en SQL :
INSERT INTO `moncv`.`CVs` (
`ID` ,
`nom` ,
`prenom` ,
`adresse` ,
`code_postal` ,
`ville` ,
`telephone`
)
VALUES (
NULL , 'Dupond', 'Pierre', '11 rue Carnot', '92123', 'Issy', '0123456789'
), (
NULL , 'Dupond', 'Paul', '45 rue Carnot', '92123', 'Issy', '0123456789'
);
Exercice: Insertion des expériences associées à nos 2 CVs.
- Ouvrir le formulaire pour insérer des données dans la table Experiences
- Remplir tous les champs, sauf ID
- ID_CV doit correspondre à un ID d'un CV existant dans la table CVs (PHPMyAdmin vous aide en vous proposant uniquement des ID CVs qui existent).
- Attention : le champ poste_actuel ne peut prendre qu'un chiffre : 1 ou 0.
- Sauvegarder.
Recommencer l'opération une ou deux fois.
Voici, pour information, ce que PhpMyAdmin vous a évité d'écrire en SQL :
INSERT INTO `moncv`.`Experiences` (
`ID` ,
`ID_CV` ,
`date_debut` ,
`date_fin` ,
`poste` ,
`societe` ,
`description` ,
`mots_cles` ,
`poste_actuel`
)
VALUES (
NULL , '1', '2009-08-01', '2010-07-06', 'Ingénieur', 'BigSociety', 'Développement php/mysql', 'php,mysql', '0'
), (
NULL , '1', '2010-06-13', '', 'Ingénieur Sénior', 'VeryBigSociety', 'Responsable de mise en production de site Web', 'php,mysql,apache2,Debian', '1'
);
La base de données SQL est maintenant configurée pour faire les TP suivants.
Exemples de requêtes
modifierÀ faire avant les exercices :
- Créer la base de données moncv et insérer quelques CVs comme décrit dans le TP.
- Lire la partie du cours sur SQL dans Wikiversité : La requête la plus simple ?
Exercice 1 : Écrire la requête SQL qui récupère le numéro de téléphone du CV ayant l'ID = 2.
La requête sera la suivante : Sélectionne le champ telephone dans la table CVs qui correspond à l'ID 2 :
SELECT telephone FROM CVs WHERE ID=2
Exercice 2 : Écrire la requête SQL qui récupère toutes les adresses des personnes qui portent le prénom Michel.
Voici la requête qui récupère toutes les adresses des personnes qui portent le prénom Michel :
SELECT * FROM CVs WHERE prenom="Paul"