introduction à mysql

références

          MySQL.org

          Manuel de référence MySQL


création d'une base de données

Pour cet exercice nous allons utiliser la base de données Hotel. Il s'agit d'une application qui permet d'inscrire les réservations dans un hôtel dans un resort. On pourra gérer les arrivées et les départs, assigner les chambres selon les demandes des clients, etc.

La première tâche est de dessiner un modèle de la base de données. Il faut identifier les tables, les champs dans les tables, les clés et les relations.

Une première version pourrait avoir l'air de ceci :




outils

Le serveur MySQL est déjà installé dans UniServer.

Pour pouvoir travailler avec les bases de données stockées sur le serveur on devrait utiliser un client visuel.

Un bon client pour MySQL est SQLYog.

Après avoir installé SQLYog vous pourrez récupérer la base de données exemple en faisant un Restore from SQL Dump... qui récupère le fichier .sql et reconstruit la base de données.






Le fichier à utiliser pour les exercices qui suivent peut être téléchargé à partir d'ici : Le backup de la base de données 'hotel'.



le langage sql

Le langage fonctionne avec une série d'instructions restreinte : il n'y a qu'environ 30 instructions en SQL.

Les instructions se divisent en 4 catégories :

  • DÉFINITION DE TABLES (DATA DEFINITION LANGUAGE)(DDL):
          CREATE, DROP, ALTER

  • MANIPULATION DE DONNÉES (DATA MANIPULATION LANGUAGE) (DML):
          INSERT, UPDATE, DELETE

  • INTERROGATIONS (QUERIES):
          SELECT

  • CONTRÔLE D'ACCÈS (DATA CONTROL LANGUAGE) (DCL):
          GRANT



Le DDL


Les commandes DDL servent à créer les tables, les modifier ou les enlever

Il faut cependant créer une base de données avant de commencer :
CREATE DATABASE [IF NOT EXISTS] db_name;


Après l'avoir créé, il faut dire à MySQL de l'ouvrir :
USE db_name;


Notez que vous ne créez pas une nouvelle bd à chaque fois que vous entrez en MySQL; cependant vous devez toujours ouvrir la bd sur laquelle vous voulez travailler.

Si on devait supprimer la base de données au complet :
DROP DATABASE db_name;



Ensuite on peut commencer à créer les tables dans la bd:

CREATE TABLE nom_table (colonne1 type1 [NOT NULL] [UNIQUE] [PRIMARY KEY] [AUTO_INCREMENT],
              colonne2 type2, ...)


Eg: CREATE TABLE employe (id varchar(5) NOT NULL UNIQUE PRIMARY KEY,
nom varchar(20), salaire numeric(9,2), date_embauche date);

Référence: Create table syntax


Allez voir les références suivantes au sujet des données:

Chapter 10. Data types

et

Choosing the right Column types


Pour changer ou modifier une table on utilise la commande ALTER TABLE ...


ALTER TABLE nom_table ADD (colonne type, ...)

Eg: ALTER TABLE employe ADD (adresse varchar(30));


Data Definition Statements


Changing the order of columns




Pour effacer une table, on utilise le DROP TABLE ...

DROP TABLE nom_table;

Eg: DROP TABLE employe;


Le DML


Les commandes DML servent à manipuler les données - les insérer, les changer ou les effacer dans les tables.





La commande INSERT

Pour mettre des valeurs dans une table on utilise le INSERT INTO ...
Notez le nombre de valeurs doit correspondre exactement au nombre de colonnes dans la table et le type de donnée doit correspondre exactement au type de colonne.
Si on doit omettre une valeur pour une colonne, on utilise l'identificateur NULL
INSERT INTO nom_table VALUES (valeur1, valeur2, ...)

Eg: INSERT INTO competence VALUES ('A111', 'COBOL', 15);

      INSERT INTO competence VALUES ('B2222', 'SQL', NULL);

On peut aussi mettre des valeurs dans seulement certaines colonnes de la table:

INSERT INTO competence(empid, experience) VALUES ('A111', 15);

Notez bien: chaque INSERT ajoute une ligne à la table; vous ne pouvez pas changer le contenu d'une ligne avec un INSERT.





Le NULL

Remarquez l'utilisation du NULL. Le NULL est un caractère spécial en SQL. NULL n'est pas la même chose qu'un espace ou un 0. NULL signifie que la valeur est inexistante ou indéterminée. Toutes les opérations faites sur NULL retourne NULL.

Pour évaluer si une colonne contient un null ou non, on ne fait pas ...WHERE col = null;
Il faut évaluer NULL au moyen de ... IS NULL ou ... IS NOT NULL





La commande UPDATE

Pour changer les données il faut faire un UPDATE ...
UPDATE nom_table SET colonne1 = valeur1, colonne2=valeur2
WHERE condition

Eg: UPDATE employe SET salaire=25000
      WHERE numemp = 'A1111';

Eg: UPDATE employe SET salaire = salaire * 1.1
      WHERE departement = 22;




La commande DELETE

Le DELETE ... sert à supprimer des lignes dans la table; notez que chaque DELETE enlève une ligne au complet; vous ne pouvez pas enlever seulement une colonne sauf en faisant un UPDATE.

DELETE FROM nom_table WHERE condition

Eg: DELETE FROM projets
      WHERE p_datefin < date();






Les commandes d'interrogation
 

Le SELECT

SELECT colonne1, colonne2, ... FROM nom_table
      WHERE condition

      * = toutes les colonnes

SELECT * FROM Projet;

SELECT Numero_projet, Titre, Budget FROM Projet;

SELECT e_id, e_Nom FROM Employe ;


LA CLAUSE WHERE ...

La clause WHERE est l'équivalent d'un IF ...
SELECT * FROM table WHERE condition;

Affiche la ligne de table SI condition est vraie;


OPÉRATEURS: =          >          <          >=          <=           <>    ou     !=         

BETWEEN          LIKE          IN          NOT             AND            OR


Supposons qu'il existe une table PRODUITS comme :

Produits
numprod      varchar(5)
description      varchar(50)
prix      decimal(9,2)
cout      decimal(9,2)





EXEMPLES:

SELECT * FROM PRODUITS WHERE NUMPROD = "A1234";

SELECT NUMPROD, DESC, PRIX FROM PRODUITS WHERE PRIX > 50;

SELECT NUMPROD, DESC, PRIX FROM PRODUITS
WHERE PRIX BETWEEN 50 AND 150;

SELECT NUMPROD, DESC FROM PRODUITS
WHERE NUMPROD LIKE "A%";

SELECT NUMPROD, DESC FROM PRODUITS
WHERE NUMPROD LIKE "A____";

          % = CHAINE DE CARACTERES

          _ = 1 CARACTERE

SELECT NUMPROD, DESC FROM PRODUITS WHERE DESC LIKE "%10%";

SELECT NUMPROD, DESC FROM PRODUITS
WHERE NUMPROD IN ("A100", "A200", "B500", "D800");

LE AND et OR S'UTILISENT COMME DANS TOUS LES AUTRES LANGAGES:

SELECT * FROM PRODUITS
WHERE DESC LIKE "A%" AND PRIX > 500;