Découverte de MySQL

Une base de données permet de stocker de manière centralisé des données/informations reliées entre elles sous forme de table. Un langage, le SQL, permet de manipuler ces données pour en sélectionner, filtrer, trier.

La base de données est stockée sur un serveur spécialisé qui peut être accédé directement à partir du code d'un programme ou d'une interface spécialisée. Généralement, on utilise l'interface pour créer puis commencer à alimenter la base de données, puis un programme dédié pour en utiliser et mettre à jour le contenu.

Nous allons utiliser un serveur MySQL, apparu au début des années 2000, dans le but de travailler en intégration avec les serveurs PHP sur le web. MySQL peut être piloté par du code PHP, en ligne de commande ou par son interface PHPmyAdmin. MySQL en est aujourd'hui à la version 7 mais ZMWS ne supporte que la version 5.

Présentation

Les bases

Une base de donnée comporte une ou plusieurs tables liées entre elles ou pas. Une table comprend un ensemble d'informations ayant une cohérence d'ensemble. On parle de champs ou colonnes pour les différentes informations de la table et de lignes ou enregistrements pour chacun des groupes d'informations.

Exemple
Une base “college” peut contenir 2 tables liées “classes” et “eleves”.

La table “classes” contient les champs “division” et “prof_principal”.

La table “eleves” contient les champs “nom”, “prenon”, “date_naissance”, “classe”.

Le champ “classe” de la table “eleves” fait référence au champ “division” de la table “classes” (un élève appartient à une classe mais une classe se compose de 1 ou plusieurs élèves).
Cette base de donnée se représente graphiquement de la manière suivante. Bien sur, dans le collége, il existe plusieurs classes et de nombreux élèves qui forment les différents enregistrements.
Une partie des enregistrements de la table “eleves” peut être celle-ci. Les commandes SQL vont, par exemple, permettre de sélectionner uniquement les élèves d'une classe ou ceux qui seront née en juillet.

Les utilisateurs

Les basses de données sont sécurisées et possèdent une table des utilisateurs. Chaque utilisateur possède un mot de passe et ne peut consulter ou modifier que les tables qui lui sont associées.

Le langage SQL

Le langage possède de nombreuses commandes dont certaines servent à créer ou détruire les bases et tables, à gérer les utilisateurs. Les commandes qui nous intéressent sont celles qui concernent les données (enregistrements et colonnes).

Sélectionner des données

SELECT colonnes FROM table INNER JOIN table2 ON lien WHERE filtre ORDER BY tri;

“colonnes” est le nom des colonnes à extraire séparées par des ',' ou '*' pour toutes (ex. SELECT nom, prénom )

“table”, “table2” sont le nom des tables à interroger. La partie INNER JOIN ... ON ... est optionnelle

“lien” permet de relier 2 tables (ex. ON eleves.classe = classes.division)

“filtre” permet de sélectionner certains enregistrements (ex. WHERE classe=“3E02”)

“tri” permet de réorganiser les données (ex. ORDER BY nom, prénom ASC pour un tri alphabétique des élèves)

SELECT * FROM eleves WHERE classe='3E 02' ORDER BY nom, prenom ASC; extrait la liste alphabétique des élèves de 3E02
SELECT prof_principal FROM classes INNER JOIN eleves ON eleves.classe=classes.division WHERE nom='Durand' AND prenom='Paul'; extrait le nom du professeur principal de Paul Durand.

Insérer des données

INSERT INTO table (colonnes) VALUES (données);

“table” nom de la table à compléter

“colonnes” liste des colonnes séparées par des ',' à remplir

“données” liste des valeurs séparées par des ',' à placer dans les colonnes

INSERT INTO eleves (nom, prenom, date_naissance, classe) VALUE (“Costes”, “Denis”, “2002-18-20”, “4E 02”);
Ajoute un élève (enregistrement) dans la table.

Modifier des données

UPDATE table SET colonne=valeur, ... WHERE condition;

“table” nom de la table à modifier (ex. UPDATE eleves)

“colonne” colonne à modifier (plusieurs colonne=valeur peuvent se suivre séparé par des ',')

“valeur” à remplacer dans la colonne (ex. SET date_naissance='2002-11-21)

“condition” enregistrement à modifier (ex. WHERE nom='Durand' AND prenom='Paul')

UPDATE eleves SET date_naissance='2002-11-21 WHERE nom='Durand' AND prenom='Paul';
Corrige la date de naissance de Paul Durand.

Supprimer des données

DELETE FROM table WHERE condition;

“table” table à modifier

“condition” enregistrements à supprimer (ex. WHERE classe='6E 02')

DELETE FROM classes WHERE classe='6E 02';
Supprime tous les élèves de la classe de 6E 02.

L'interface PHPmyAdmin

Il s'agit d'une interface web fournie avec le serveur MySQL qui permet de créer les bases, tables et gérer les enregistrements manuellement.

Généralement, le programmeur créé la base, défini les tables et champs grâce à l'interface. Une fois la base fonctionnelle, il y accède grâce à un programme pour l'alimenter automatiquement et rapidement. Ensuite c'est le site web qui prend le relai pour son utilisation.

Bibliothèque MySQL PHP

Il existe plusieurs bibliothèques PHP permettant d'accéder à une base MySQL. La bibliothèque de fonctions originelles est aujourd'hui souvent remplacée par la bibliothèque PDO (PHP Data Objects) compatible avec la programmation objet. Les bibliothèques possèdent de nombreuses fonctions à consulter dans la documentation.

Une séquence d'interrogation d'une base est de la forme :

Connexion à la base : $bd = new PDO('mysql_host;dbname', 'user', 'pass'); avec mysql_host = serveur mySQL, dbname = nom de la base, user = nom de l'utilisateur et pass = son mot de passe.

Envoi de la commande : $rqt = $bd->query('sql'); avec sql = la commande à exécuter

Récupération des données : $result = $rqt->fetch(); ou $results = $rqt->fetchAll(); pour récupérer un/tous les résultats d'une requette SELECT. $result est une variable tableau contenant 1 enregistrement et $results une variable tableau à 2 dimensions contenant tous les enregistrements sélectionnées.

Complément

Référence du langage SQL (il existe quelques petites différence pour MySQL)

Référence MySQL5 en français sur Developpez

Cours sur PHP et MySQL sur OpenClassrooms

Activités

Création de la base de données pour mon premier site MySQL

Création de mon premier site MySQL