Salut à tous,

Pour celles et ceux qui sont venus au cours Samedi, je vous envoie la dernière 
version de ma doc MYSQL, des scripts et une extraction de la base que vous 
pourrez réinsérer ainsi :

dans phpMyAdmin :

1 - créer une database
2 - sur  la fenêtre de la database entrez dans la zone de saisie d'un nom de 
fichier sous la zone de saisie de requête SQL, le nom du fichier d'extraction 
de la base : 'mabase.dump' et cliquer sur 'Execute'. il vous créera les tables 
et les remplira  avec les données bidons que j'y ai mises.

Après, c'est à vous de jouer. 

Attachment: linux-azur.php3
Description: Binary data

Title: MySQL

MySQL par la pratique


I ) Qu'est ce qu'une Base de Données


C'est une façon d'organiser des listes d'informations  qui devient nécessaire quand la masse d'informations est trop volumineuse ou trop complexe pour être gérée à la main ou via desfichiers.

Prenons l'exemple d'une Base de Données Linux_Azur dans laquelle j'ai les coordonnées de tous les adhérents, les manifestations organisées par l'association, les lieux de ces manifestations, les cours, les personnes qui y participent ...etc.

Pour les lieux de réunion, ce n'est pas très compliqué à gérer et à mettre à jour car il y en a au maximum une dizaine et la fréquence de mise à  jour est réduite. Par contre, les adhérents sont un peu plus complexes à gérer :  on peut faire l'analogie avec un système de fiches sur lesquelles on noterait les coordonnées, les années de cotisation, lescompétences, leur demande de support ou de cours, à quels coursils ont participé ...etc.

Pour mettre à jour une fiche il est assez simple de les trier parordre alphabétique, mais dès qu'on veut faire une rechercheplus complexe ( qui a payé sa cotisation cette année, au contraireceux qui ne l'on pas fait, ceux qui sont intéressés par uncours qui va se dérouler pour les prévenir par email ...etc.) il faut lire toutes les fiches une par une pour trouver celles qui nousintéressent. Les Bases de données vous permettent d'enregistrerces données et de les ressortir suivant vos demandes sans trop setracasser.

L'avantage d'une BDD par rapport à un fichier en ligne est de réduire le temps de récupération des données :
   . il n'est pas nécessaire de parcourir toutes les fiches pour retrouver ce qu'on veut
   . on peut trier les enregistrements par nom, par code postal, en ordre croissant ou décroissant ...
   . le résultat peut être directement exploitable : on est pas obligé de ressortir toutes les données et on peut en  sortir des statistiques
   . la BDD permet un accès multiple : plusieures personnes peuvent accéder en même temps à la même fiche

II) Terminologie


La BDD : endroit où toutes les informations sont stockées :
  . la collection des données est organisée dans des tables
  . chaque table est organisée en rangées ( rows ) eten colonnes ( champs ou fields )
  . chaque rangée d'une table contient un enregistrement
  . chaque enregistrement peut contenir plusieures informations, chaque colonne comprend un morceau d'information

Le Système de Gestion : le logiciel utilisé pour insérer, récupérer, modifier ou supprimer des enregistrements

Le mot Relationnel indique que les tables peuvent être associées entre elles pour vérifier la validité des infos : une personne suivant les cours doit être ( de préférence ) adhérente de l'association et être à jour de ses cotisations.

---------> SGBDR

III) Installer MySQL et PHP


Le CD du magazine contient tout ce dont vous avez besoin :

IV) Connexion à la base de données


Une fois le serveur lancé vous devez lancer un logiciel client pour accéder aux BDD que vous créerez :

mysql [-h hostname] [-u username] [-p]

-h hostname est facultatif : le nom de la machine sur laquelle se trouve MySQL ( on peut ne pas le mettre si le serveur se trouve sur notre machine )
-u username est aussi facultatif : donne le nom de l'utilisateur qui gère la BDD. si le nom d'utilisateur est le même que le login on peur omettre cette option
-p oblige l'utilisateur à saisir le mot de passe

--> prompt : mysql>

déconnexion du client : QUIT

V) Commandes de base

Pour bien marquer les mots réservés par le langage SQL, ceux-ci sont écrits en majuscules ( c'est ainsi que vous les trouverez dans toutes les documentations traitant de ce langage. Ces commandes sont universelles et sont reconnues par toutes les Bases de Données commerciales ou non.

elles se terminent toutes par le signe ';'

mysql> SELECT now();          donne la date et l'heure actuelle
mysql> SELECT user();         donne l'utlisateur par lequel vous vous êtes connectés
mysql> SELECT version();   donne la version ne mysql

- Création de la base de données :

mysql> CREATE DATABASE linux_azur;

-
spécifier qu'on va travailler sur cette base :

mysql> USE  linux_azur;

- quand on voudra se connecter à MySQL en ouvrant cette base :

Prompt_Unix> mysql linux_azur

- Création d'une table :

mysql> CREATE TABLE  nomtable ( nom_champ1 type_champ1 options_champ1, nom_champ2 type_champ2 option_champ2...);

les types de champ :

   chaîne de caractères :
     .  CHAR(longueur) : longueur fixe les caractères manquant étant remplacés par des espaces
     .  VARCHAR(longueur) : longueur variable

   Numérique :
     . TINYINT : signé :-128< <+127 non signés : 0 < < 255
     . SMALLINT : signé :-32768 < < +32767, non signés : 0< < 65535  
     . MEDIUMINT : signés : - 2^23 < < +2^23-1, signés : 0 < < 2^24 -1
     . INT : 2^32
     . BIGINT : 2^40
     . FLOAT : décimal simple précision
     . DOUBLE : décimal double précision

    Date :
     . DATE : format  YYYY-MM-DD
     . TIME : heure format  hh:mm:ss
     . DATETIME : date et heure séparé par espace
     . TIMESTAMP : durée format yyyymmddhhmmss
     . YEAR : année format  YYYY

    Ensemble de valeurs :
     . ENUM(val1,val2,...) : liste les valeurs possibles. Une seule valeur doit être choisie
     . SET(val1, val2,...) : idem mais on peut choisir plusieures valeurs à la fois

- Création d'un enregistrement :

mysql> INSERT INTO nomtable VALUES ('1', 'mahy', 'patrice', ....);
mysql> INSERT INTO nomtable SET (id, nom, prenom) VALUES ('1', 'mahy', 'patrice');

Une autre façon de rentrer des données dans une table est de les rentrer dans un fichier plat avec un enregistrement par ligneen séparant les camps par un caractère qu'on ne risque pas de trouver dans ceux ci. Un point virgule suffira dans notre cas.Pour insérer ce fichier dans la table il suffit de taper :
mysql> LOAD DATA LOCAL INFILE 'nom_du_fichier' INTO TABLE nom_table FIELDS TERMINATED BY ';' ;

- Recherche de données :

mysql> SELECT [*| champ1,champ2 ...] FROM nomtable [WHERE condition];

'*' signifie qu'on veut visualiser tous les champs de la tables. On peut choisir une liste des champs à visualiser en les listant et les séparant par des virgules.

WHERE introduit une condition de la forme :'nomchamp opérateur const1' où opérateur peut être : =, !=, <, <=, >, >=, LIKE ( quand on cherche des données dont ont ne connait qu'une partie ).

SELECT  * FROM adherent WHERE nom like '%m%';
           recherche tous les adhérents dont le nom contient un m
SELECT  * FROM adherent WHERE nom like 'M%';              recherche tous les adhérents dont le nom commence par M

- Modifier des données

UPDATE nomtable SET nomchamp1=val1 WHERE nomchamp=valchamp;  modifiera la valeur que sur les enregistrements qui correspondent à la condition. Sans clause WHERE il aurait mis la même valeur dans le champs correspondant pour tous les enregistrements

- Modifier le type d'un champs d'une table

ALTER TABLE nomtable MODIFY nom VARCHAR(35); modifie la longueur du champ nom

au lieu de faire un MODIFY on peut ajouter un champ (ADD) ou en supprimer un (DROP)

- Supprimer un enregistrement

DELETE FROM nomtable WHERE nomchamp1 = val1;


on a séparé les données en plusieures tables en disant que l'on pouvait toujours les lier via un identifiant commun à ces deux tables. Voici comment utiliser cette liaison et afficher les données que l'on veut mais provenant de deux tables différentes :
SELECT * FROM adherent, cotisation WHERE adherent.id_adh=cotisation.id_adh;
comme id_adherent est le même nom de champ dans les deux tables on les différencie en mettant le nom de la table suivi d'un '.' pour dire que le champ appartient à la table.on peut faire de même avec les noms des champs que l'on veut choisir :
SELECT adherent.nom, adherent.prenom, cotisation.annee FROM adherent, cotisation WHERE adherent.id_adh=cotisation.id_adh;
Il va nous les afficher par ordre de rentrée dans la table cotisation. Pour trier ces données par numéro d'adhérent il suffit de faire :
SELECT adherent.nom, adherent.prenom, cotisation.annee FROM adherent, cotisation WHERE adherent.id_adh=cotisation.id_adh ORDER BY adherent.id_adh;
Pour ne pas avoir à retaper le nom de la table à chaque fois ( surtout quand il est long, pour les fainéants =;o)) ) on peut attribuer un alias au nom de la table. Dans l'exemple ci - dessus je rajoute a comme alias à adhérent et c comme alias à cotisation ce qui donne :
SELECT a.nom, a.prenom, c.annee FROM adherent a, cotisation c WHERE a.id_adh=c.id_adh ORDER BY a.id_adh;

VI) phpMyAdmin

Maintenant que vous êtes familiarisés avec les commandes de base vous pouvez aborder l'interface qui vous aidera à la création de BDD et des tables associées : je pars du principe que vous avez installé php MySQL.

Ouvrez votre navigateur favori et tapez dans la zone réservée à l'url  :  http://localhost/phpMyAdmin/ .

Vous avez alors votre fenêtre de navigateur coupée en deux parties : à gauche le nom des databases que l'utilisateur gère et à droite la fenêtre de saisie et de visualisation des données associées. La base 'mysql' contient toutes les données systèmes utiles à la gestion de MySQL.Vous navez pas à y toucher en principe à part pour ajouter un utilisateur qui sera interrogé par Apache s'il lui demande ( cf cours sur Apache ).La base test n'est remplie que si vous l'avez créée à l'installation.

Vous n'avez plus qu'à suivre ce qui est inscrit à l'écran en vous souvenant que vous ne devez pas utiliser de caractère accentué pour les noms de Database, de table,et de champs. Pour ce qui est de la création de tables je vous conseille de réfléchir à l'avance car il vous demande le nombre de champs à créer. Vous pourrez toujours ajouter un ou plusieurs champs via les zones de saisie situées en milieu de page ou en supprimer un via le bouton 'drop' qui se trouve sur la ligne correspondante. 

phpMyAdmin ne gère malheureusement pas les liaisons entre les tables et si vous tapez les requêtes complexes il vous dira que la requête s'est bien passée mais ne vous affichera pas les données. Pour vérifier le résultat tapez la requête au prompt Mysql.

Attachment: mabase.dump
Description: Binary data

Attachment: liste_adherent.php3
Description: Binary data

Attachment: sais_adherent.php3
Description: Binary data

Attachment: saisie_adherent.php3
Description: Binary data

Répondre à