Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

CAS PRATIQUE SOUS MYSQL

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 25

SUPPORT PRATIQUE DU SGBD MYSQL

PLAN DU COURS PRATIQUE

A/ LA BASE DE DONNEES
B/ LE SYSTEME DE GESTION DE BASE DE DONNES MYSQL
C/ CREATION DE BASE DE DONNEES SOUS MYSQL
D/ TP
B/ LE SYSTEME DE GESTION DE BASE DE DONNES MYSQL
Les bases de données ont pris aujourd’hui une place essentielle dans l’informatique, plus
particulièrement en gestion. Au cours des trente dernières années, des concepts, méthodes et
algorithmes ont été développés pour gérer des données sur mémoires secondaires.

Vous avez sans doute une idée intuitive des bases de données. Prenez garde cependant,
car ce mot est souvent utilisé pour désigner n’importe quel ensemble de données ; il s’agit là
d’un abus de langage qu’il faut éviter. Une base de données est un ensemble de données
modélisant les objets d’une partie du monde réel et servant de support à une application
informatique. Pour mériter le terme de base de données, un ensemble de données non
indépendantes doit être interrogeable par le contenu, c’est-à-dire que l’on doit pouvoir retrouver
tous les objets qui satisfont à un certain critère, par exemple tous les produits qui coûtent moins
de 100 francs. Les données doivent être interrogeables selon n’importe quel critère. Il doit être
possible aussi de retrouver leur structure, par exemple le fait qu’un produit possède un nom, un
prix et une quantité.

Pour la gestion efficace de grandes bases de données, l’on a recours aux Systèmes de Gestion
de Bases de Données (SGBD). Un SGBD peut être perçu comme un ensemble de logiciels systèmes
permettant aux utilisateurs d’insérer, de modifier et de rechercher efficacement des données spécifiques
dans une grande masse d’informations (pouvant atteindre quelques milliards d’octets) partagée par de
multiples utilisateurs. Les informations sont stockées sur mémoires secondaires, en général des disques
magnétiques. Les recherches peuvent être exécutée à partir de la valeur d’une donnée désignée par un
nom dans un ensemble d’objets (par exemple, les produits de prix inférieur à 100 francs), mais aussi à
partir de relations entre objets (par exemple, les produits commandés par un client habitant Paris). Les
données sont partagées, aussi bien en interrogation qu’en mise à jour. Le SGBD rend transparent le
partage, à savoir donne l’illusion à chaque utilisateur qu’il est seul à travailler avec les données.

En résumé, un SGBD peut donc apparaître comme un outil informatique permettant la


sauvegarde, l’interrogation, la recherche et la mise en forme de données stockées sur mémoires
secondaires. Ce sont là les fonctions premières, complétées par des fonctions souvent plus complexes,
destinées par exemple à assurer le partage des données mais aussi à protéger les données contre tout
incident et à obtenir des performances acceptables.

B-1 FONCTIONS D’UN SGBD

D'une manière générale, un SGBD doit avoir les caractéristiques suivantes :


Indépendance physique

Le niveau physique peut être modifié indépendamment du niveau conceptuel. Cela


signifie que tous les aspects matériels de la base de données n’apparaissent pas pour l’utilisateur,
il s'agit simplement d'une structure transparente de représentation des informations.

Indépendance logique

Le niveau conceptuel doit pouvoir être modifié sans remettre en cause le niveau physique, c'est-à-
dire que l'administrateur de la base doit pouvoir la faire évoluer sans que cela gêne les utilisateurs.

Manipulabilité

Des personnes ne connaissant pas la base de données doivent être capables de décrire leurs
requêtes sans faire référence à des éléments techniques de la base de données. Ceci peut se faire à
travers un dictionnaire de données ou un catalogue système.

Rapidité des accès

Le système doit pouvoir fournir les réponses aux requêtes (recherches d’informations à partir
d’une ou plusieurs bases de données) le plus rapidement possible, cela implique des algorithmes
de recherche rapides.

Différents langage d’accès

Le SGBD doit au moins supporter un langage adressant les concepts du modèle (par exemple,
dans le cas du modèle relationnelle, ce langage est SQL). Néanmoins, ce type de langage ne
permet pas tous les types de manipulation. Par conséquent, soit les SGBD proposent un langage
plus complet avec la possibilité de définir des accès à la base de données, soit ils proposent un
couplage d’un langage de type SQL avec un langage de programmation conventionnel.

Administration centralisée

Le SGBD doit permettre à l'administrateur de pouvoir manipuler les données, insérer des
éléments, vérifier son intégrité de façon centralisée.

Limitation de la redondance

Le SGBD doit pouvoir éviter dans la mesure du possible des informations redondantes, afin
d'éviter d'une part un gaspillage d'espace mémoire mais aussi des erreurs.

Vérification de l’intégrité

Les données doivent être cohérentes entre elles, de plus lorsque des éléments font références à
d'autres, ces derniers doivent être présents.

Partage des données

Le SGBD doit permettre à plusieurs utilisateurs d’accéder à la base de données de manière


simultanée et transparente.
Sécurité des données

Le SGBD doit permettre de spécifier qui a le droit d’accéder ou de modifier tout ou une partie
d’une base de données. Il faut donc présenter des mécanismes permettant de gérer les droits
d’accès aux données selon les utilisateurs afin de se prémunir contre les manipulations illicites
intentionnelles ou accidentelles.

Résistance aux pannes

Le SGBD doit garantir la cohérence de l’information et des traitements en cas de panne. Les
opérations sur les bases de données pouvant être très longues, il faut fournir un mécanisme de
reprise en cas de panne matérielle ou logicielle, intentionnelle ou fortuite.

Capacité de stockage élevée

Le SGBD doit permettre de gérer des données très volumineuses, pouvant atteindre plusieurs
milliards d’octets. Les unités de stockage sont passées du mégaoctet Mo (106 octets) au gigaoctet
Go (109), puis au téraoctet To (1012), puis petaoctet Po (1016), voir même au exaoctet Eo (1018) et
zettaoctet Zo (1021).

C/ CREATION DE BASE DE DONNEES SOUS MYSQL


La conception et l'utilisation de bases de données est un vaste sujet, il a fallu faire des
choix sur les thèmes à aborder. Dans notre cas, nous allons traiter ce qui suit :

- Création d'une base de données et des tables nécessaires à la gestion des données.
- Gestion des relations entre les différentes tables d'une base.
- Sélection des données selon de nombreux critères.
- Manipulation des données (modification, suppression, calculs divers).
- Gestion des utilisateurs de la base de données.

Pour notre cours, nous avons choisi le système de gestion de base de données MYSQL
Server de Microsoft. Nous avons choisi d’utiliser MySQL, toutefois, celui-ci pourrait être
remplacé par PostgreSQL ou Oracle XE sans problème.

C-1 LE LANGAGE SQL

Le SQL (Structured Query Language) est un langage informatique qui permet d'interagir
avec des bases de données relationnelles. C'est le langage pour base de données le plus répandu,
et c'est bien sûr celui utilisé par MySQL. C'est donc le langage que nous allons utiliser pour
dire au client MySQL d'effectuer des opérations sur la base de données stockée sur le serveur
MySQL. Il a été créé dans les années 1970 et c'est devenu standard en 1986 (pour la norme
ANSI - 1987 en ce qui concerne la norme ISO).
C-2 PRESENTATION DE MYSQL

MySQL est donc un Système de Gestion de Bases de Données Relationnelles, qui utilise le
langage SQL. C'est un des SGBDR les plus utilisés. Sa popularité est due en grande partie au fait qu'il
s'agit d'un logiciel Open Source, ce qui signifie que son code source est librement disponible et que
quiconque qui en ressent l'envie et/ou le besoin peut modifier MySQL pour l'améliorer ou l'adapter à
ses besoins. Une version gratuite de MySQL est par conséquent disponible. À noter qu'une version
commerciale payante existe également.

Le développement de MySQL commence en 1994 par David Axmark et Michael Widenius.


EN 1995, la société MySQL AB est fondée par ces deux développeurs, et Allan Larsson. C'est la
même année que sort la première version officielle de MySQL. En 2008, MySQL AB est rachetée par
la société Sun Microsystems, qui est elle-même rachetée par Oracle Corporation en 2010. On craint
alors la fin de la gratuité de MySQL, étant donné qu'Oracle Corporation édite un des grands
concurrents de MySQL : Oracle Database, qui est payant (et très cher). Oracle a cependant promis de
continuer à développer MySQL et de conserver la double licence GPL (libre) et commerciale jusqu'en
2015 au moins.

MySQL est très utilisé, surtout par les débutants. Vous pourrez faire de nombreuses
choses avec ce logiciel, et il convient tout à fait pour découvrir la gestion de bases de données.
Sachez cependant que MySQL est loin d'être parfait. En effet, il ne suit pas toujours la norme
officielle. Certaines syntaxes peuvent donc être propres à MySQL et ne pas fonctionner sous
d'autres SGBDR. J'essayerai de le signaler lorsque le cas se présentera, mais soyez conscients
de ce problème.

Par ailleurs, il n'implémente pas certaines fonctionnalités avancées, qui pourraient vous
être utiles pour un projet un tant soit peu ambitieux. Enfin, il est très permissif, et acceptera
donc des requêtes qui généreraient une erreur sous d'autres SGBDR (ses concurrents).

C-3 ORGANISATION D'UNE BASE DE DONNEES

Bon, vous savez qu'une base de données sert à gérer les données. Très bien. Mais
comment ?? Facile ! Comment organisez-vous vos données dans la "vie réelle" ?? Vos papiers
par exemple ? Chacun son organisation bien sûr, mais je suppose que vous les classez d'une
manière ou d'une autre.

Toutes les factures ensemble, tous les contrats ensemble, etc. Ensuite on subdivise : les
factures d’électricité, les factures pour la voiture. Ou bien dans l'autre sens : tous les papiers
concernant la voiture ensemble, puis subdivision en taxes, communication avec l'assureur,
avec le garagiste.

Une base de données, c'est pareil ! On classe les informations. MySQL étant un SGBDR,
je ne parlerai que de l'organisation des bases de données relationnelles. Comme je vous l'ai dit
précédemment, on représente les données sous forme de tables. Une base va donc contenir
plusieurs tables (elle peut n'en contenir qu'une bien sûr, mais c'est rarement le cas). Si je
reprends mon exemple précédent, on a donc une table représentant des clients (donc des
personnes). Chaque table définit un certain nombre de colonnes, qui sont les caractéristiques
de l'objet représenté par la table (les attributs de l'en-tête dans la théorie relationnelle). On a
donc ici une colonne "Nom", une colonne "Prénom", une colonne "Email" et une colonne
"Numéro" qui nous permettent d'identifier les clients individuellement (les noms et prénoms ne
suffisent pas toujours).

Numéro Nom Prénom Email

1 KOUASSI Luce kluce@gmail.com

2 MAHAN Christian mahcristian@yahoo.fr

3 NGUETTA Jacques Jacques.nguetta@gmail.com

4 YEO Pierre yeopi@hotmail.fr

Si je récapitule, dans une base nous avons donc des tables, et dans ces tables, on a des
colonnes. Dans ces tables, vous introduisez vos données. Chaque donnée introduite le sera sous
forme de ligne dans une table, définissant la valeur de chaque colonne pour cette donnée.

Il existe plusieurs manières d'utiliser MySQL. La première, que je vais utiliser tout au
long du tutoriel, est l'utilisation en ligne de commande.

C-3-1 Ligne de commande


Mais qu'est-ce donc ?
Eh bien il s'agit d'une fenêtre toute simple, dans laquelle toutes les instructions sont tapées à la
main. Pas de bouton, pas de zone de saisie. Juste votre clavier.
Les utilisateurs de Linux connaissent très certainement. Pour Mac, il faut utiliser l'application
"Terminal" que vous trouverez dans Applications > Utilitaires. Quant aux utilisateurs de
Windows, c'est le "Command Prompt" que vous devez trouver (Démarrer > Tous les
programmes > Accessoires).
C-3-2 Interface graphique

Si l'on ne veut pas utiliser la ligne de commande (il faut bien avouer que ce n'est pas très
sympathique cette fenêtre monochrome), on peut utiliser une interface graphique, qui permet
d'exécuter pas mal de choses simples de manière intuitive sur une base de données.
Comme interface graphique pour MySQL, on peut citer MySQL Workbench, PhpMyAdmin
(souvent utilisé pour créer un site web en combinant MySQL et PHP) ou MySQL Front par
exemple.
C-3-3 Pourquoi utiliser la ligne de commande ?

C'est vrai ça, pourquoi ? Si c'est plus simple et plus convivial avec une interface graphique ?
Deux raisons :
Primo, parce que je veux que vous maîtrisiez vraiment les commandes. En effet, les interfaces
graphiques permettent de faire pas mal de choses, mais une fois que vous serez bien lancés,
vous vous mettrez à faire des choses subtiles et compliquées, et il ne serait pas étonnant qu'il
vous soit obligatoire d'écrire vous-mêmes vos requêtes ;
Ensuite, parce qu'il est fort probable que vous désiriez utiliser MySQL en combinaison avec
un autre langage de programmation (si ce n'est pas votre but immédiat, ça viendra
probablement un jour). Or, dans du code PHP (ou Java, ou Python, etc.), on ne va pas écrire
"Ouvre PhpMyAdmin et clique sur le bon bouton pour que je puisse insérer une donnée dans
la base". On va devoir écrire en dur les requêtes. Il faut donc que vous sachiez comment faire.
Bien sûr, si vous voulez utiliser une interface graphique, je ne peux guère vous en empêcher.
Mais je vous encourage vivement à commencer par utiliser la ligne de commande, ou au
minimum à faire l'effort de décortiquer les requêtes que vous laisserez l'interface graphique
construire pour vous. Ceci afin de pouvoir les écrire vous-mêmes le jour où vous en aurez
besoin (ce jour viendra, je vous le prédis).
C-3-4 Installation du logiciel
Pour télécharger MySQL, vous pouvez vous rendre sur le site suivant :
http://dev.mysql.com/downloads/mysql/#downloads
Sélectionnez l'OS sur lequel vous travaillez (Windows, Mac OS ou Linux).
C-3-5 Windows
Téléchargez MySQL avec l'installeur (MSI Installer), puis exécutez le fichier téléchargé.
L'installeur démarre et vous guide lors de
l'installation. (TD).

C-3-6 Connexion à MySQL


MySQL est basé sur un modèle client - serveur, comme la plupart des SGBD. Cela implique
donc que votre base de données se trouve sur un serveur auquel vous n'avez pas accès
directement, il faut passer par un client qui fera la liaison entre vous et le serveur.
Lorsque vous installez MySQL, plusieurs choses sont donc installées sur votre ordinateur :
Un serveur de base de données MySQL ;
Plusieurs logiciels clients qui permettent d'interagir avec le serveur.
Ecran de connexion

C-3-6-a Connexion au client


Parmi ces clients, celui dont nous allons parler à présent est mysql (original comme nom ).
C'est celui que nous utiliserons tout au long de ce cours pour nous connecter à notre base de
données et y insérer, consulter et modifier des données.

C-3-6-b Déconnexion
Pour se déconnecter du client, il suffit d'utiliser la commande quit ou exit .

C-4 SYNTAXE SQL ET PREMIERES COMMANDES

Maintenant que nous savons nous connecter, nous allons enfin pouvoir discuter avec le
serveur MySQL (en langage SQL évidemment). Donc, reconnectons-nous si nous sommes
déconnectés.
C-4-1 Syntaxe

SELECT est la commande qui permet la sélection de données, mais aussi l'affichage.
Avant d'aller plus loin, voici quelques règles générales à retenir concernant le SQL qui,
comme tout langage informatique, obéit à des règles syntaxiques très strictes.
C-4-1-a Fin d'une instruction

Pour signifier à MySQL qu'une instruction est terminée, il faut mettre le caractère ;. Tant qu'il
ne rencontre pas ce caractère, le client MySQL pense que vous n'avez pas fini d'écrire votre
commande et attend gentiment que vous continuiez. Par exemple, la commande suivante
devrait afficher 100. Mais tant que MySQL ne recevra pas de ;, il attendra simplement la
suite.

En appuyant sur la touche Entrée vous passez à la ligne suivante, mais la commande ne
s'effectue pas. Remarquez au passage le changement dans l'invite de commande. mysql>
signifie que vous allez entrer une commande, tandis que -> signifie que vous allez entrer la
suite d'une commande commencée précédemment.
Tapez maintenant ; puis appuyer sur Entrée. Ca y est, la commande est envoyée, l'affichage se
fait !
Ce caractère de fin d'instruction obligatoire va vous permettre :

 D'écrire une instruction sur plusieurs lignes ;


 D'écrire plusieurs instructions sur une seule ligne.

C-4-1-b Commentaires

Les commentaires sont des parties de code qui ne sont pas interprétées. Ils servent
principalement à vous repérer dans votre code. En SQL, les commentaires sont introduits par
-- (deux tirets). Cependant, MySQL déroge un peu à la règle SQL et accepte deux syntaxes :
# : tout ce qui suit ce caractère sera considéré comme commentaire
-- : la syntaxe normale est acceptée uniquement si les deux tirets sont suivis d'une espace au
moins.
Afin de suivre au maximum la norme SQL, ce sont les -- qui seront utilisés tout au long de
cours.

C-4-1-c Chaînes de caractères


Lorsque vous écrivez une chaîne de caractères dans une commande SQL, il faut absolument
l'entourer de guillemets simples (donc des apostrophes).

MySQL permet également l'utilisation des guillemets doubles, mais ce n'est pas le cas de la plupart
des SGBDR. Histoire de ne pas prendre de mauvaises habitudes, je vous conseille donc de n'utiliser
que les guillemets simples pour délimiter vos chaînes de caractères.

Exemple : la commande suivante sert à afficher "Bonjour la classe !"

Par ailleurs, si vous désirez utiliser un caractère spécial dans une chaîne, il vous faudra
l'échapper avec \. Par exemple, si vous entourez votre chaîne de caractères de guillemets
simples mais voulez utiliser un tel guillemet à l'intérieur de votre chaîne :

MySQL est également doué en calcul :

Pas de guillemets cette fois puisqu'il s'agit de nombres. MySQL calcule pour nous et nous affiche :
MySQL est sensible à la priorité des opérations, comme vous pourrez le constater en tapant
cette commande :

Utilisateur

Il n'est pas très conseillé de travailler en tant que "root" dans MySQL, à moins d'en avoir
spécifiquement besoin. En effet, "root" a tous les droits. Ce qui signifie que vous pouvez faire
n'importe quelle bêtise dans n'importe quelle base de données pendant que j'ai le dos tourné.
Pour éviter ça, nous allons créer un nouvel utilisateur, qui aura des droits très restreints. Je
l’appellerai "abc", mais libre à vous de lui donner le nom que vous préférez. Pour ceux qui sont
sous Unix, notez que si vous créez un utilisateur du même nom que votre utilisateur Unix, vous
pourrez dès lors omettre ce paramètre lors de votre connexion à mysql.
Je vous demande ici de me suivre aveuglément, car je ne vous donnerai que très peu
d'explications. En effet, la gestion des droits et des utilisateurs fera l'objet d'un chapitre entier
dans une prochaine partie du cours. Tapez donc cette commande dans mysql, en remplaçant
abc par le nom d'utilisateur que vous avez choisi, et mot_de_passe par le mot de passe que vous
voulez lui attribuer :

GRANT ALL PRIVILEGES : Cette commande permet d'attribuer tous les droits (c'est-à-
dire insertions de données, sélections, modifications, suppressions…).
ON elevage.* : définit les bases de données et les tables sur lesquelles ces droits sont acquis.
Donc ici, on donne les droits sur la base "elevage" (qui n'existe pas encore, mais ce n'est pas
grave, nous la créerons plus tard), pour toutes les tables de cette base (grâce à *).
TO 'sdz' : définit l'utilisateur auquel on accorde ces droits. Si l'utilisateur n'existe pas, il est
créé.
@'localhost' : définit à partir d'où l'utilisateur peut exercer ces droits. Dans notre cas,
'localhost', donc il devra être connecté à partir de cet ordinateur.
IDENTIFIED BY 'mot_de_passe': définit le mot de passe de l'utilisateur.
Pour vous connecter à mysql avec ce nouvel utilisateur, il faut donc taper la commande
suivante (après s'être déconnecté bien sûr) :

D-LES TYPES DE DONNEES

Nous avons vu dans l'introduction qu'une base de données contenait des tables qui, elles-mêmes
sont organisées en colonnes, dans lesquelles sont stockées des données.
En SQL (et dans la plupart des langages informatiques), les données sont séparées en plusieurs
types (par exemple : texte, nombre entier, date…). Lorsque l'on définit une colonne dans une
table de la base, il faut donc lui donner un type, et toutes les données stockées dans cette colonne
devront correspondre au type de la colonne. Nous allons donc voir les différents types de
données existant dans MySQL.

D-1Types numériques

On peut subdiviser les types numériques en deux sous-catégories : les nombres entiers, et les
nombres décimaux.

D-1-a Nombres entiers

Les types de données qui acceptent des nombres entiers comme valeur sont désignés par le
mot-clé INT, et ses déclinaisons TINYINT, SMALLINT, MEDIUMINT et BIGINT. La
différence entre ces types est le nombre d'octets (donc la place en mémoire) réservés à la
valeur du champ. Voici un tableau reprenant ces informations, ainsi que l'intervalle dans
lequel la valeur peut être comprise pour chaque type.

Minimum Maximum
Type Nombre d’octets Minimum Maximum
TINYINT 1 -128 127
SMALLINT 2 -32768 32767
MEDIUMINT 3 -8388608 8388607
INT 4 -2147483648 2147483647
BIGINT 8 -9223372036854775808 922337203685477580
mbre d'octets Minimum Maximum

Si vous essayez de stocker une valeur en dehors de l'intervalle permis par le type de votre
champ, MySQL stockera la valeur la plus proche. Par exemple, si vous essayez de stocker
12457 dans un TINYINT, la valeur stockée sera 127 ; ce qui n'est pas exactement pareil, vous
en conviendrez. Réfléchissez donc bien aux types de vos champs.

D-1-b Nombres décimaux


Cinq mots-clés permettent de stocker des nombres décimaux dans une colonne : DECIMAL,
NUMERIC, FLOAT, REAL ET DOUBLE.

D-1-b-1 NUMERIC et DECIMAL


NUMERIC et DECIMAL sont équivalents et acceptent deux paramètres : la précision et
l'échelle.

 La précision définit le nombre de chiffres significatifs stockés, donc les 0 à gauche ne


comptent pas. En effet 0024 est équivalent à 24. Il n'y a donc que deux chiffres
significatifs dans 0024.
 L'échelle définit le nombre de chiffres après la virgule.

Dans un champ DECIMAL (5,3), on peut donc stocker des nombres de 5 chiffres significatifs
maximum, dont 3 chiffres sont après la virgule. Par exemple : 12.354, -54.258, 89.2 ou -56.
DECIMAL(4) équivaut à écrire DECIMAL(4, 0).

En SQL pur, on ne peut pas stocker dans un champ DECIMAL (5,3) un nombre supérieur à 99.999, puisque
le nombre ne peut avoir que deux chiffres avant la virgule (5 chiffres en tout, dont 3 après la virgule, 5-3 =
2 avant). Cependant, MySQL permet en réalité de stocker des nombres allant jusqu'à 999.999. En effet,
dans le cas de nombres positifs, MySQL utilise l'octet qui sert à stocker le signe - pour stocker un chiffre
supplémentaire.

Comme pour les nombres entiers, si l'on entre un nombre qui n'est pas dans l'intervalle
supporté par la colonne, MySQL le remplacera par le plus proche supporté. Donc si la
colonne est définie comme un DECIMAL (5,3) et que le nombre est trop loin dans les positifs
(1012,43 par exemple), 999.999 sera stocké, et -99.999 si le nombre est trop loin dans les
négatifs. S'il y a trop de chiffres après la virgule, MySQL arrondira à l'échelle définie.
D-1-b-2 FLOAT, DOUBLE et REAL

Le mot-clé FLOAT peut s'utiliser sans paramètre, auquel cas quatre octets sont utilisés pour
stocker les valeurs de la colonne. Il est cependant possible de spécifier une précision et une
échelle, de la même manière que pour DECIMAL et NUMERIC.

Quant à REAL et DOUBLE, ils ne supportent pas de paramètres. DOUBLE est normalement
plus précis que REAL (stockage dans 8 octets contre stockage dans 4 octets), mais ce n'est pas
le cas avec MySQL qui utilise 8 octets dans les deux cas. Je vous conseille donc d'utiliser
DOUBLE pour éviter les surprises en cas de changement de SGBDR.

D-1-b-3 Valeurs exactes vs. valeurs approchées

Les nombres stockés en tant que NUMERIC ou DECIMAL sont stockés sous forme de chaînes
de caractères. Par conséquent, c'est la valeur exacte qui est stockée. Par contre, les types
FLOAT, DOUBLE et REAL sont stockés sous forme de nombres, et c'est une valeur approchée
qui est stockée.
Cela signifie que si vous stockez par exemple 56,6789 dans une colonne de type FLOAT, en
réalité, MySQL stockera une valeur qui se rapproche de 56,6789 (par exemple,
56,678900000000000001). Cela peut poser problème pour des comparaisons notamment
(56,678900000000000001 n'étant pas égal à 56,6789). S'il est nécessaire de conserver la
précision exacte de vos données (l'exemple type est celui des données bancaires), il est donc
conseillé d'utiliser un type numérique à valeur exacte (NUMERIC ou DECIMAL donc).

D-1-c Types alphanumériques

D-1-c-1 Chaînes de type texte

D-1-c-1-a CHAR et VARCHAR

Pour stocker un texte relativement court (moins de 255 octets), vous pouvez utiliser les types
CHAR et VARCHAR. Ces deux types s'utilisent avec un paramètre qui précise la taille que
peut prendre votre texte (entre 1 et 255). La différence entre CHAR et VARCHAR est la manière
dont ils sont stockés en mémoire. Un CHAR(x) stockera toujours x octets, en remplissant si
nécessaire le texte avec des espaces vides pour le compléter, tandis qu'un VARCHAR(x) stockera
jusqu'à x octets (entre 0 et x), et stockera en plus en mémoire la taille du texte stocké.
Si vous entrez un texte plus long que la taille maximale définie pour le champ, celui-ci sera
tronqué.

Je parle ici en octets, et non en caractères pour ce qui est de la taille des champs. C'est
important : si la plupart des caractères sont stockés en mémoire sur un seul octet, ce
n'est pas toujours le cas. Par exemple, lorsque l'on utilise l'encodage UTF-8, les
caractères accentués (é, è, ...) sont codés sur deux octets.

D-1-c-1-b TEXT

Comment stocker des textes de plus de 255 octets ?


Il suffit alors d'utiliser le type TEXT, ou un de ses dérivés TINYTEXT, MEDIUMTEXT ou
LONGTEXT. La différence entre ceux-ci étant la place qu'ils permettent d'occuper en
mémoire. Petit tableau habituel :

Type Longueur maximale Mémoire occupée


TINYTEXT 2^8 octets Longueur de la chaîne + 1 octet
TEXT 2^16 octets Longueur de la chaîne + 2 octets
MEDIUMTEXT 2^24 octets Longueur de la chaîne + 3 octets
LONGTEXT 2^32 octets Longueur de la chaîne + 4 octets

D-1-d Chaînes de type binaire

Comme les chaînes de type texte que l'on vient de voir, une chaîne binaire n'est rien d'autre
qu'une suite de caractères.
Cependant, si les textes sont affectés par l'encodage et l'interclassement, ce n'est pas le cas des
chaînes binaires. Une chaîne binaire n'est rien d'autre qu'une suite d'octets. Aucune
interprétation n'est faite sur ces octets. Ceci a deux conséquences principales.
 Une chaîne binaire traite directement l'octet, et pas le caractère que l'octet représente.
Donc par exemple, une recherche sur une chaîne binaire sera toujours sensible à la
casse, puisque "A" (code binaire : 01000001) sera toujours différent de "a" (code
binaire : 01100001).
 Tous les caractères sont utilisables, y compris les fameux caractères de contrôle non-
affichables définis dans la table ASCII.
Par conséquent, les types binaires sont parfaits pour stocker des données "brutes" comme des
images par exemple, tandis que les chaînes de texte sont parfaites pour stocker...du texte !
Les types binaires sont définis de la même façon que les types de chaînes de texte.
VARBINARY(x) et BINARY(x) permettent de stocker des chaînes binaires de x caractères
maximum (avec une gestion de la mémoire identique à VARCHAR(x) et CHAR(x)). Pour les
chaînes plus longues, il existe les types TINYBLOB, BLOB, MEDIUMBLOB et
LONGBLOB, également avec les mêmes limites de stockage que les types TEXT.

D-1-e Types temporels

Pour les données temporelles, MySQL dispose de cinq types qui permettent, lorsqu'ils sont
bien utilisés, de faire énormément de choses.
Avant d'entrer dans le vif du sujet, une petite remarque importante : lorsque vous stockez une
date dans MySQL, certaines vérifications sont faites sur la validité de la date entrée.
Cependant, ce sont des vérifications de base : le jour doit être compris entre 1 et 31 et le mois
entre 1 et 12. Il vous est tout à fait possible d'entrer une date telle que le 31 février 2011.
Soyez donc prudents avec les dates que vous entrez et récupérez.
Les cinq types temporels de MySQL sont DATE, DATETIME, TIME, TIMESTAMP et
YEAR.
Comme son nom l'indique, DATE sert à stocker une date. TIME sert quant à lui à stocker une
heure, et DATETIME stocke...une date ET une heure !

D-1-e-1 DATE

Pour entrer une date, l'ordre des données est la seule contrainte. Il faut donner d'abord l'année
(deux ou quatre chiffres), ensuite le mois (deux chiffres) et pour finir, le jour (deux chiffres),
sous forme de nombre ou de chaîne de caractères. S'il s'agit d'une chaîne de caractères,
n’importe quelle ponctuation peut être utilisée pour délimiter les parties (ou aucune). Voici
quelques exemples d'expressions correctes (A représente les années, M les mois et J les jours) :

'AAAA-MM-JJ' (c'est sous ce format-ci qu'une DATE est stockée dans MySQL)
'AAMMJJ'
'AAAA/MM/JJ'
'AA+MM+JJ'
'AAAA%MM%JJ'
AAAAMMJJ (nombre)
AAMMJJ (nombre)
L'année peut donc être donnée avec deux ou quatre chiffres. Dans ce cas, le siècle n'est pas
précisé, et c'est MySQL qui va décider de ce qu'il utilisera, selon ces critères :
si l'année donnée est entre 00 et 69, on utilisera le 21e siècle, on ira donc de 2000 à 2069 ;
par contre, si l'année est comprise entre 70 et 99, on utilisera le 20e siècle, donc entre 1970 et
1999.
E-CREATION D'UNE BASE DE DONNEES

Nous allons enfin créer notre première base de données. Nous verrons comment créer et
supprimer une base de données.
E-1 Conseils et conventions
E-1-a Conseils
Noms de tables et de colonnes
N'utilisez jamais, au grand jamais, d'espaces ou d'accents dans vos noms de bases, tables ou
colonnes. Au lieu d'avoir une colonne "date de naissance", préférez "date_de_naissance" ou
"date_naissance". Et au lieu d'avoir une colonne "prénom", utilisez "prenom". Évitez
également d'utiliser des mots réservés comme nom de colonnes/tables/bases. Par "mot
réservé", j'entends un mot-clé SQL, donc un mot qui sert à définir quelque chose dans le
langage SQL. Vous trouverez une liste exhaustive des mots réservés dans la documentation
officielle. Parmi les plus fréquents : date, text, type. Ajoutez donc une précision à vos noms
dans ces cas-là (date_naissance, text_article ou type_personnage par exemple).
Notez que MySQL permet l'utilisation de mots-clés comme noms de tables ou de colonnes, à
condition que ce nom soit entouré de ` (accent grave/backquote). Cependant, ceci est propre à
MySQL et ne devrait pas être utilisé.
Soyez cohérents
Vous vous y retrouverez bien mieux si vous restez cohérents dans votre base. Par exemple,
mettez tous vos noms de tables au singulier, ou au contraire au pluriel. Choisissez, mais tenez-
vous-y. Même chose pour les noms de colonnes. Et lorsqu'un nom de table ou de colonne nécessite
plusieurs mots, séparez les toujours avec '_' (ex : date_naissance) ou bien toujours avec une majuscule
(ex : dateNaissance).
Ce ne sont que quelques exemples de situations dans lesquelles vous devez décider d'une marche à
suivre, et la garder tout au long de votre projet (voire pour tous vos projets futurs). Vous gagnerez
énormément de temps en prenant de telles habitudes.
Conventions
Mots-clés
Une convention largement répandue veut que les commandes et mots-clés SQL soient écrits
complètement en majuscules. Il est plus facile de relire une commande de 5 lignes lorsqu'on peut
différencier au premier coup d’œil les commandes SQL des noms de tables et de colonnes.
Noms de bases, de tables et de colonnes
Les mots-clés SQL seront écrits en majuscule pour les différencier du reste, donc évidemment, les
noms de bases, tables et colonnes seront écrits en minuscule.
Notez que MySQL n'est pas nécessairement sensible à la casse en ce qui concerne les noms de tables
et de colonnes. En fait, il est très probable que si vous travaillez sous Windows, MySQL ne soit pas
sensible à la casse pour les noms de tables et de colonnes. Sous Mac et Linux par contre, c'est le
contraire qui est le plus probable.

E-2 Création et suppression d'une base de données


E-2-a Création
Nous allons donc créer notre base de données, que nous appellerons elevage. Rappelez-vous,
lors de la création de votre utilisateur MySQL, vous lui avez donné tous les droits sur la base
elevage, qui n'existait pas encore. Si vous choisissez un autre nom de base, vous n'aurez aucun
droit dessus.
La commande SQL pour créer une base de données est la suivante :

TRAVAUX DIRIGES

Nous allons à partir du modèle de données suivant, créer une base de données avec MySQL.

Règle de gestion

-Un étudiant peut suivre plusieurs cours avec un et un seul professeur.

Etudiant(numEtud, nomEtud, prenomEtud, #numProf) ;


Professeur(numProf, nomProf, prenomProf, sexeProf) ;
Cours(numCours, libelleCours, dateCours)
Suivi(numEtud-numCours) ;
Commande pour créer la base de données Gestetudiant : create database gestetudiant ;

Nous allons voir notre base de données créée. On tape la commande : Show databases ;

Il y a plusieurs bases de données créées. La base de données gestetudiant est en jaune.


Pour supprimer la base de données, on tape la commande suivante :

La base de données gestetudiant a été supprimée. Elle n’apparaît plus dans la liste des bases
de données.
La base de données gestetudiant est supprimée. Nous allons la créer à nouveau pour nos
travaux.

La commande use permet d’utiliser une base de données.


Créons la première table de notre base de données.

Pour voir la table créée, on tape : show tables ;

Pour supprimer une table, on tape : drop table etudiant ;

Modification d’une table


Syntaxe de la requête
Lorsque l'on modifie une table, on peut vouloir lui ajouter, retirer ou modifier quelque chose.
Dans les trois cas, c'est la commande ALTER TABLE qui sera utilisée, une variante existant
pour chacune des opérations :
ALTER TABLE nom_table ADD ... -- permet d'ajouter quelque chose (une colonne par exemple)
ALTER TABLE nom_table DROP ... -- permet de retirer quelque chose
ALTER TABLE nom_table CHANGE ...
ALTER TABLE nom_table MODIFY ... -- permettent de modifier une colonne
Nous allons utiliser la table étudiant pour faire quelques modifications avec les syntaxes ci-dessus.

Ajout et suppression d'une colonne


Ajout
ALTER TABLE nom_table
ADD [COLUMN] nom_colonne description_colonne;

Le [COLUMN] est facultatif, donc si à la suite de ADD vous ne précisez pas ce que vous voulez ajouter,
MySQL considérera qu'il s'agit d'une colonne.

Description de la table etudiant avant l’ajout de la colonne nomProf.

Description de la table etudiant après l’ajout de la colonne numProf.

Ajout de la colonne contact.

Description de la table etudiant à nouveau


Suppression
La syntaxe de ALTER TABLE ... DROP ... est très simple :

Modification de colonne

Changement du nom de la colonne


ALTER TABLE nom_table
CHANGE ancien_nom nouveau_nom description_colonne;

INSERTION DE DONNEES
Syntaxe de INSERT

Insertion sans préciser les colonnes

Pour vérifier, vous pouvez utiliser la requête suivante :


SELECT * FROM Animal;

Insertion en précisant les colonnes


Insertion multiple

SELECTION DE DONNEES
Comme son nom l'indique, ce chapitre traitera de la sélection et de l'affichage de données.
Au menu :

 Syntaxe de la requête SELECT (que vous avez déjà croisée il y a quelque temps) ;
 Sélection de données répondant à certaines conditions ;
 Tri des données ;
 Elimination des données en double ;
 Récupération de seulement une partie des données (uniquement les 10 premières
lignes, par exemple).

Syntaxe de SELECT

La requête qui permet de sélectionner et afficher des données s'appelle SELECT. Nous
l'avons déjà un peu utilisée dans le chapitre d'installation, ainsi que pour afficher tout le
contenu de la table Animal.
SELECT permet donc d'afficher des données directement. Des chaînes de caractères, des
résultats de calculs, etc.

SELECT permet également de sélectionner des données à partir d'une table. Pour cela, il faut
ajouter une clause à la commande
SELECT : la clause FROM, qui définit de quelle structure (dans notre cas, une table)
viennent les données.
Sélectionner toutes les colonnes

Il est cependant déconseillé d'utiliser SELECT * trop souvent. Donner explicitement le nom
des colonnes dont vous avez besoin présente deux avantages :

 D'une part, vous êtes certains de ce que vous récupérez ;


 D'autre part, vous récupérez uniquement ce dont vous avez vraiment besoin, ce qui
permet d'économiser des ressources.

La clause WHERE

La clause WHERE ("où" en anglais) permet de restreindre les résultats selon des critères
de recherche. On peut par exemple vouloir ne sélectionner que les femmes :

SUPPRESSION ET MODIFICATION DE DONNEES


Suppression
La commande utilisée pour supprimer des données est DELETE. Cette opération est
irréversible, soyez très prudents !
On utilise la clause WHERE de la même manière qu'avec la commande SELECT pour
préciser quelles lignes doivent être
supprimées.
DELETE FROM nom_table WHERE critères;

Pour supprimer toutes les lignes d'une table, il suffit de ne pas préciser de clause WHERE.

Attention, je le répète, cette opération est irréversible. Soyez toujours bien sûrs d'avoir
sous la main une sauvegarde de votre base de données au cas où vous regretteriez votre
geste (on ne pourra pas dire que je ne vous ai pas prévenus).

Modification
La modification des données se fait grâce à la commande UPDATE, dont la syntaxe est la
suivante :

Vous aimerez peut-être aussi