Installation de MySQL

Maintenant qu'on sait à peu près de quoi on parle, il est temps d'installer MySQL sur l'ordinateur, et de commencer à l'utiliser. Au programme de ce chapitre :

  • Installation de MySQL
  • Connexion et déconnexion au client MySQL
  • Création d'un utilisateur
  • Bases de la syntaxe du langage SQL
  • Introduction aux jeux de caractères et aux interclassements

Avant-propos

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.

Ligne de commande

Mais qu'est-ce donc ? o_O

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).

Commande prompt (Windows)

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.

Pourquoi utiliser la ligne de commande ?

C'est vrai ça, pourquoi ? Si c'est plus simple et plus convivial avec une interface graphique ? :euh:

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).

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).

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. Lorsqu'il vous demande de choisir entre trois types d'installation, choisissez "Typical". Cela installera tout ce dont nous pourrions avoir besoin.

Choix du type d'installation

L'installation se lance. Une fois qu'elle est terminée, cliquez sur "Terminer" après vous être assurés que la case "lancer l'outil de configuration MySQL" est cochée.

Lancement outil de configuration

Dans cet outil de configuration, choisissez la configuration standard, et à l'étape suivante, cochez l'option "Include Bin Directory in Windows PATH"

Options configurations

On vous propose alors de définir un nouveau mot de passe pour l'utilisateur "root". Choisissez un mot de passe et confirmez-le. Ne cochez aucune autre option à cette étape. Cliquez ensuite sur "Execute" pour lancer la configuration.

Mac OS

Téléchargez l'archive DMG qui vous convient (32 ou 64 bits), double-cliquez ensuite sur ce .dmg pour ouvrir l'image disque. Vous devriez y trouver 4 fichiers dont deux .pkg. Celui qui nous intéresse s'appelle mysql-5.5.9-osx10.6-x86_64.pkg (les chiffres peuvent changer selon la version de MySQL téléchargée et votre ordinateur). Ouvrez ce fichier qui est en fait l'installateur de MySQL, et suivez les instructions.

Une fois le programme installé, vous pouvez ouvrir votre terminal (pour rappel, il se trouve dans Applications -> Utilitaires).

Tapez les commandes et exécutez les instructions suivantes :

1
2
cd /usr/local/mysql
sudo ./bin/mysqld_safe
  • Entrez votre mot de passe si nécessaire
  • Tapez Ctrl + Z
1
bg
  • Tapez Ctrl + D
  • Quittez le terminal

MySQL est prêt à être utilisé !

Configuration

Par défaut, aucun mot de passe n'est demandé pour se connecter, même avec l'utilisateur root (qui a tous les droits). Je vous propose donc de définir un mot de passe pour cet utilisateur :

1
/usr/local/mysql/bin/mysqladmin -u root password <votre_mot_de_passe>

Ensuite, pour pouvoir accéder directement au logiciel client depuis la console, sans devoir aller dans le dossier où est installé le client, il vous faut ajouter ce dossier à votre variable d'environnement PATH. Pour cela, tapez la commande suivante dans le terminal :

1
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> ~/.profile

/usr/local/mysql/bin est donc le dossier dans lequel se trouve le logiciel client (plusieurs logiciels clients en fait). Redémarrez votre terminal pour que le changement prenne effet.

Linux

Sous Debian ou Ubuntu

Exécuter la commande suivante pour installer MySQL :

1
sudo apt-get install mysql-server mysql-client

Une fois votre mot de passe introduit, MySQL va être installé.

Sous RedHat

Exécuter la commande suivante pour installer MySQL :

1
sudo yum install mysql mysql-server

Une fois votre mot de passe introduit, MySQL va être installé.

Dans tous les cas, après installation

Pensez ensuite à modifier le mot de passe de l'utilisateur root (administrateur ayant tous les droits) avec la commande suivante :

1
sudo mysqladmin -u root -h localhost password '<votre mot de passe>'

Connexion à MySQL

Je vous ai dit que MySQL était 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.

Connexion au client

Parmi ces clients, celui dont nous allons parler à présent est mysql (original comme nom o_O ). C'est celui que vous utiliserez tout au long de ce cours pour vous connecter à votre base de données et y insérer, consulter et modifier des données. La commande pour lancer le client est tout simplement son nom :

1
mysql

Cependant cela ne suffit pas. Il vous faut également préciser un certain nombre de paramètres. Le client mysql a besoin d'au minimum trois paramètres :

  • l'hôte : c'est-à-dire l'endroit où est localisé le serveur ;
  • le nom d'utilisateur ;
  • et le mot de passe de l'utilisateur.

L'hôte et l'utilisateur ont des valeurs par défaut, et ne sont donc pas toujours indispensables. La valeur par défaut de l'hôte est "localhost", ce qui signifie que le serveur est sur le même ordinateur que le client. C'est bien notre cas, donc nous n'aurons pas à préciser ce paramètre. Pour le nom d'utilisateur, la valeur par défaut dépend de votre système. Sous Windows, l'utilisateur courant est "ODBC", tandis que pour les systèmes Unix (Mac et Linux), il s'agit de votre nom d'utilisateur (le nom qui apparaît dans l'invite de commande).

Pour votre première connexion à MySQL, il faudra vous connecter avec l'utilisateur "root", pour lequel vous avez normalement défini un mot de passe (si vous ne l'avez pas fait, inutile d'utiliser ce paramètre, mais ce n'est pas très sécurisé). Par la suite, nous créerons un nouvel utilisateur.

Pour chacun des trois paramètres, deux syntaxes sont possibles :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
########
# Hôte #
########

--hote=nom_hote
 
# ou 

-h nom_hote

########
# User #
########

--user=nom_utilisateur

# ou 

-u nom_utilisateur

################
# Mot de passe #
################

--password=password

# ou 

-ppassword

Remarquez l'absence d'espace entre -p et le mot de passe. C'est voulu (mais uniquement pour ce paramètre-là), et souvent source d'erreurs. La commande complète pour se connecter est donc :

1
2
3
4
5
6
7
8
9
mysql -h localhost -u root -pmotdepassetopsecret

# ou

mysql --host=localhost --user=root --password=motdepassetopsecret

# ou un mélange des paramètres courts et longs si ça vous amuse

mysql -h localhost --user=root -pmotdepassetopsecret

J'utiliserai uniquement les paramètres courts à partir de maintenant. Choisissez ce qui vous convient le mieux. Notez que pour le mot de passe, il est possible (et c'est même très conseillé) de préciser uniquement que vous utilisez le paramètre, sans lui donner de valeur :

1
mysql -h localhost -u root -p

Apparaissent alors dans la console les mots suivants :

1
Enter password:

Tapez donc votre mot de passe, et là, vous pouvez constater que les lettres que vous tapez ne s'affichent pas. C'est normal, cessez donc de martyriser votre clavier, il n'y peut rien le pauvre :colere: . Cela permet simplement de cacher votre mot de passe à d'éventuels curieux qui regarderaient par-dessus votre épaule.

Donc pour résumer, pour me connecter à mysql, je tape la commande suivante :

1
mysql -u root -p

J'ai omis l'hôte, puisque mon serveur est sur mon ordinateur. Je n'ai plus qu'à taper mon mot de passe et je suis connecté.

Déconnexion

Pour se déconnecter du client, il suffit d'utiliser la commande quit ou exit.

Syntaxe SQL et premières commandes

Maintenant que vous savez vous connecter, vous allez enfin pouvoir discuter avec le serveur MySQL (en langage SQL évidemment). Donc, reconnectez-vous si vous êtes déconnectés.

Vous pouvez constater que vous êtes connectés grâce au joli (quoiqu'un peu formel) message de bienvenue, ainsi qu'au changement de l'invite de commande. On voit maintenant mysql>.

"Hello World !"

Traditionnellement, lorsque l'on apprend un langage informatique, la première chose que l'on fait, c'est afficher le célèbre message "Hello World !". Pour ne pas déroger à la règle, je vous propose de taper la commande suivante (sans oublier le ; à la fin) :

1
SELECT 'Hello World !';

SELECT est la commande qui permet la sélection de données, mais aussi l'affichage. Vous devriez donc voir s'afficher "Hello World !"

Hello World !

Hello World !

Comme vous le voyez, "Hello World !" s'affiche en réalité deux fois. C'est parce que MySQL représente les données sous forme de table. Il affiche donc une table avec une colonne, qu'il appelle "Hello World !" faute de meilleure information. Et dans cette table nous avons une ligne de données, le "Hello World !" que nous avons demandé.

Syntaxe

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.

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.

1
SELECT 100

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.

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 ce tutoriel.

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 petit Zeste !"

1
SELECT 'Bonjour petit Zeste !';

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 :

1
2
SELECT 'Salut l'ami';  -- Pas bien !
SELECT 'Salut l\'ami'; -- Bien !

Quelques autres caractères spéciaux :

Caractère Explication
\n retour à la ligne
\t tabulation
\ antislash (eh oui, il faut échapper le caractère d'échappement…)
% pourcent (vous verrez pourquoi plus tard)
_ souligné (vous verrez pourquoi plus tard aussi)

Cette manière d'échapper les caractères spéciaux (avec \) est propre à MySQL. D'autres SGBDR demanderont qu'on leur précise quel caractère sert à l'échappement ; d'autres encore demanderont de doubler le caractère spécial pour l'échapper. Soyez donc prudent et renseignez-vous si vous n'utilisez pas MySQL.

Notez que pour échapper un guillemet simple (et uniquement ce caractère), vous pouvez également l'écrire deux fois. Cette façon d'échapper les guillemets correspond d'ailleurs à la norme SQL. Je vous encourage par conséquent à essayer de l'utiliser au maximum.

1
2
3
SELECT 'Salut l'ami';  -- ne fonctionne pas !
SELECT 'Salut l\'ami'; -- fonctionne !
SELECT 'Salut l''ami'; -- fonctionne aussi et correspond à la norme !

Un peu de math

MySQL est également doué en calcul :

1
SELECT (5+3)*2;

Pas de guillemets cette fois puisqu'il s'agit de nombres. MySQL calcule pour nous et nous affiche :

(5+3)*2

16

MySQL est sensible à la priorité des opérations, comme vous pourrez le constater en tapant cette commande :

1
SELECT (5+3)*2, 5+3*2;

Résultat :

(5+3)*2

5+3*2

16

11

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 "sdz", 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 sdz par le nom d'utilisateur que vous avez choisi, et mot_de_passe par le mot de passe que vous voulez lui attribuer :

1
GRANT ALL PRIVILEGES ON elevage.* TO 'sdz'@'localhost' IDENTIFIED BY 'mot_de_passe';

Je décortique donc rapidement :

  • 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) :

1
mysql -u sdz -p

Encodage, jeux de caractères et interclassement

La table ASCII

Le processeur d'un ordinateur, c'est-à-dire le composant qui s'occupe de traiter les informations, exécuter les programmes, etc., ne comprend que les instructions formulées en binaire ; il ne peut que lire une suite d’éléments pouvant être dans deux états : 0 ou 1.

Donc, tous les programmes informatiques que vous pourriez écrire, toutes les instructions SQL, tous les fichiers, sont in fine traduits en code machine, donc une longue suite de 0 et de 1, pour pouvoir être lus ou exécutés. Chacun de ces 0 ou 1 est un bit. Ces bits sont regroupés par huit pour former un octet.

L'ordinateur ne connaît donc pas la notion de caractères. Il ne sait pas ce qu'est un "A", ou un "è". Il a donc fallu créer une table de conversion pour traduire les caractères de la langue courante en une série de bits. La table ASCII était née !

La table ASCII est donc une table de conversion, qui permet de traduire en code binaire 128 caractères, dont 33 caractères de contrôle (séparateur de fichier, saut de page, …) et 95 caractères affichables. Les caractères affichables sont les 26 lettres de l'alphabet, en majuscules et en minuscules, les 10 chiffres arabes et toute une série de caractères spéciaux courants (#, ;, ), <, …).

De combien de bits avons-nous besoin pour stocker ces 128 caractères ?

Chaque bit peut prendre deux valeurs différentes. Donc avec 1 bit, je peux représenter 2 caractères. Avec 2 bits, je représente 22, donc 4 caractères. Et 128 = 27. J'ai donc besoin de 7 bits pour pouvoir représenter toute ma table ASCII. L'ordinateur travaillant sur des octets, on code donc la table ASCII sur un octet, avec le 8e bit à 0. "00110100" représente par exemple le caractère "4", "01001101" le caractère "M" (le premier bit étant celui de droite, le 8e celui de gauche).

Jeux de caractères

On s'est ensuite rendu compte que ces 128 caractères n'étaient pas suffisants. En effet, ils ne comprennent pas les caractères accentués ("é", "à"). Ils ne comprennent pas non plus tous les caractères cyrilliques, japonais,etc. On a alors commencé à utiliser le huitième bit. Ce qui permettait de représenter 128 caractères supplémentaires (donc 28 = 256 en tout). Mais avec 128 caractères supplémentaires, on n'a pas de quoi représenter tous les caractères qui n'existent pas dans la table ASCII. On a donc créé plusieurs jeux de caractères différents. Exemples :

  • l'ISO 8859-1 (ou latin1) : qui permet de couvrir une bonne partie des langues d'Europe occidentale en ajoutant les lettres accentuées aux caractères ASCII de base ("å", "é", "ô", "ñ", …)
  • l'ISO 8859-7 : qui permet de représenter les lettres grecques
  • l'ISO 8859-11 : qui contient une bonne partie des glyphes de la langue thaï
  • l'ISO 8859-15 : qui est une révision de l'ISO 8859-1, et qui remplace quelques caractères peu utilisés par d'autres, plus nécessaires, comme l'euro ("€")

Dès lors, lorsque l'on crée un fichier, un programme ou autre, il faut préciser quel jeu de caractère (ou encodage) est utilisé.

L'UTF-8

Il restait un petit problème : comment faire des documents (ou autres) qui doivent utiliser plusieurs jeux de caractères différents ? On a donc créé un nouveau type d'encodage, permettant de représenter les caractères avec deux octets au lieu d'un. 16 bits donnent 216 = 65536 possibilités. On peut donc, en utilisant deux octets, représenter plus de 65000 caractères. Cet encodage s'appelle l'UTF-8. Le désavantage d'un tel encodage est évidemment le coût en mémoire, deux octets prenant plus de place qu'un. Cependant, tous les caractères ne sont pas codés sur deux octets. S'il s'agit d'un caractère de base de la table ASCII, le 8e bit est à 0, ce qui indique qu'il n'est codé que sur un octet. Par contre, lorsque le 8e bit est à 1, cela indique qu'on a affaire à un caractère spécial et qu'il est codé sur deux octets. Donc, en UTF-8, un "é" prendra plus de place qu'un "e" (deux octets au lieu d'un).

En quoi cela nous concerne-t-il ?

Je vous l'ai dit, il est nécessaire, pour tout fichier/programme/…, de préciser l'encodage utilisé. Je vous propose de choisir l'UTF-8.

A chaque connexion à MySQL, exécutez donc la commande suivante :

1
SET NAMES 'utf8';

Cette commande définit l'UTF-8 comme l'encodage dans lequel les requêtes sont émises par le client, ainsi que celui utilisé par le serveur pour communiquer avec le client. Lors de la création de notre base de données dans un prochain chapitre, nous définirons également son encodage.

Il faut bien exécuter cette commande à chaque connexion !

Il est également possible d'ajouter une option lors de la connexion, pour éviter de devoir exécuter SET NAMES. En vous connectant de la manière suivante, l'encodage sera défini à UTF-8 directement à la connexion :

1
mysql -u root -p --default-character-set=utf8

Interclassement

L'interclassement est un ensemble de règles qui vient s'ajouter à l'encodage. Pour chaque jeu de caractères, plusieurs interclassements peuvent exister, qui définissent deux choses :

  • l'ordre des caractères : par exemple, l'ordre alphabétique. Lorsque l'on trie les données avec MySQL, le tri sera basé sur l'interclassement.
  • les équivalences de caractères : on peut par exemple définir que les majuscules sont équivalentes aux minuscules (interclassement insensible à la casse). De sorte que si l'on recherche les données qui contienne "a", on trouve également celles qui contiennent "A".

Je vous propose de garder l'interclassement par défaut (qui est insensible à la casse).


En résumé

  • MySQL peut s'utiliser en ligne de commande ou avec une interface graphique.
  • Pour se connecter à MySQL en ligne de commande, on utilise : mysql -u utilisateur [-h hôte] -p.
  • Pour terminer une instruction SQL, on utilise le caractère ;.
  • En SQL, les chaînes de caractères doivent être entourées de guillemets simples '.
  • Lorsque l'on se connecte à MySQL, il faut définir l'encodage utilisé, soit directement dans la connexion avec l'option --default-character-set, soit avec la commande SET NAMES.