SQL de base
SQL de base
assez bonne idée des problèmes qu’on peut rencontrer avec ce type de bases, et je pourrai donc
appuyer mes explications sur des problèmes réalistes, plutôt que d’essayer d’en inventer.
Nous nous occupons donc d’un élevage d’animaux. On travaille avec plusieurs espèces : chats,
chiens, tortues entre autres (tiens, ça me rappelle quelque chose ). Dans la suite de cette
partie, nous nous contenterons de créer une table Animal qui contiendra les caractéristiques
principales des animaux présents dans l’élevage, mais dès le début de la deuxième partie, d’autres
tables seront créées afin de pouvoir gérer un grand nombre de données complexes.
I.4.2.1. 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 :
Lorsque nous créerons nos tables dans la base de données, automatiquement elles seront encodées
également en UTF-8.
I.4.2.2. Suppression
Si vous avez envie d’essayer cette commande, faites-le maintenant, tant qu’il n’y a rien dans
votre base de données. Soyez très prudents, car vous effacez tous les fichiers créés par MySQL
qui servent à stocker les informations de votre base.
58
I. MySQL et les bases du langage SQL
Si vous essayez cette commande alors que la base de données elevage n’existe pas, MySQL vous
affichera une erreur :
Pour éviter ce message d’erreur, si vous n’êtes pas sûrs que la base de données existe, vous
pouvez utiliser l’option IF EXISTS, de la manière suivante :
SHOW WARNINGS;
Vous avez maintenant créé une base de données (si vous l’avez effacée avec DROP DATABASE,
recréez-la). Mais pour pouvoir agir sur cette base, vous devez encore avertir MySQL que c’est
bien sûr cette base-là que vous voulez travailler. Une fois de plus, la commande est très simple :
USE elevage
59
I. MySQL et les bases du langage SQL
C’est tout ! À partir de maintenant, toutes les actions effectuées le seront sur la base de données
elevage (création et modification de tables par exemple).
Notez que vous pouvez spécifier la base de données sur laquelle vous allez travailler lors de la
connexion à MySQL. Il suffit d’ajouter le nom de la base à la fin de la commande de connexion :
I.4.2.4. En résumé
— Pour créer une base de données, on utilise la commande CREATE DATABASE nom_base.
— Pour supprimer une base de données : DROP DATABASE nom_base.
— À chaque connexion à MySQL, il faut préciser avec quelle base on va travailler, avec USE
nom_base.
60
I.5. Création de tables
Dans ce chapitre, nous allons créer, étape par étape, une table Animal, qui servira à stocker
les animaux présents dans notre élevage. Soyez gentils avec cette table, car c’est elle qui vous
accompagnera tout au long de la première partie (on apprendra à jongler avec plusieurs tables
dans la deuxième partie).
Pour commencer, il faudra définir de quelles colonnes (et leur type) la table sera composée.
Ne négligez pas cette étape, c’est la plus importante. Une base de données mal conçue est un
cauchemar à utiliser. Ensuite, petit passage obligé par de la théorie : vous apprendrez ce qu’est
une clé primaire et à quoi ça sert, et découvrirez cette fonctionnalité exclusive de MySQL que
sont les moteurs de table. Enfin, la table Animal sera créée, et la requête de création des tables
décortiquée. Et dans la foulée, nous verrons également comment supprimer une table.
Avant de choisir le type des colonnes, il faut choisir les colonnes que l’on va définir. On va donc
créer une table Animal. Qu’est-ce qui caractérise un animal ? Son espèce, son sexe, sa date de
naissance. Quoi d’autre ? Une éventuelle colonne commentaires qui peut servir de fourre-tout.
Dans le cas d’un élevage sentimental, on peut avoir donné un nom à nos bestioles. Disons que
c’est tout pour le moment. Examinons donc les colonnes afin d’en choisir le type au mieux.
— Espèce : on a des chats, des chiens et des tortues pour l’instant. On peut donc caractériser
l’espèce par un ou plusieurs mots. Ce sera donc un champ de type alphanumérique. Les
noms d’espèces sont relativement courts, mais n’ont pas tous la même longueur. On
choisira donc un VARCHAR. Mais quelle longueur lui donner ? Beaucoup de noms d’espèces
ne contiennent qu’un mot, mais ”harfang des neiges”, par exemple, en contient trois, et
18 caractères. Histoire de ne prendre aucun risque, autant autoriser jusqu’à 40 caractères
pour l’espèce.
— Sexe : ici, deux choix possibles (mâle ou femelle). Le risque de voir un troisième sexe
apparaître est extrêmement faible. Par conséquent, il serait possible d’utiliser un ENUM.
Cependant, ENUM reste un type non standard. Pour cette raison, nous utiliserons plutôt
une colonne CHAR(1), contenant soit 'M' (mâle), soit 'F' (femelle).
— Date de naissance : pas besoin de réfléchir beaucoup ici. Il s’agit d’une date, donc soit
un DATETIME, soit une DATE. L’heure de la naissance est-elle importante ? Disons que
oui, du moins pour les soins lors des premiers jours. DATETIME donc !
— Commentaires : de nouveau un type alphanumérique évidemment, mais on a ici aucune
idée de la longueur. Ce sera sans doute succinct mais il faut prévoir un minimum de
place quand même. Ce sera donc un champ TEXT.
61
I. MySQL et les bases du langage SQL
Il faut maintenant déterminer si l’on autorise les colonnes à ne pas stocker de valeur (ce qui est
donc représenté par NULL).
— Espèce : un éleveur digne de ce nom connaît l’espèce des animaux qu’il élève. On
n’autorisera donc pas la colonne espece à être NULL.
— Sexe : le sexe de certains animaux est très difficile à déterminer à la naissance. Il n’est
donc pas impossible qu’on doive attendre plusieurs semaines pour savoir si ”Rox” est en
réalité ”Roxa”. Par conséquent, la colonne sexe peut contenir NULL.
— Date de naissance : pour garantir la pureté des races, on ne travaille qu’avec des
individus dont on connaît la provenance (en cas d’apport extérieur), les parents, la date
de naissance. Cette colonne ne peut donc pas être NULL.
— Commentaires : ce champ peut très bien ne rien contenir, si la bestiole concernée ne
présente absolument aucune particularité.
— Nom : en cas de panne d’inspiration (ça a l’air facile comme ça mais, une chatte pouvant
avoir entre 1 et 8 petits d’un coup, il est parfois difficile d’inventer 8 noms originaux
comme ça !), il vaut mieux autoriser cette colonne à être NULL.
I.5.1.3. Récapitulatif
!
Ne pas oublier de donner une taille aux colonnes qui en nécessitent une, comme les
VARCHAR(x), les CHAR(x), les DECIMAL(n, d), ...
62
I. MySQL et les bases du langage SQL
I.5.2.1. Identité
Imaginez que quelqu’un ait le même nom de famille que vous, le même prénom, soit né dans
la même ville et ait la même taille. En dehors de la photo et de la signature, quelle sera la
différence entre vos deux cartes d’identité ? Son numéro !
Suivant le même principe, on va donner à chaque animal un numéro d’identité. La colonne
qu’on ajoutera s’appellera donc id, et il s’agira d’un INT, toujours positif donc UNSIGNED. Selon
la taille de l’élevage (la taille actuelle mais aussi la taille qu’on imagine qu’il pourrait avoir dans
le futur !), il peut être plus intéressant d’utiliser un SMALLINT, voire un MEDIUMINT. Comme il
est peu probable que l’on dépasse les 65000 animaux, on utilisera SMALLINT. Attention, il faut
bien considérer tous les animaux qui entreront un jour dans la base, pas uniquement le nombre
d’animaux présents en même temps dans l’élevage. En effet, si l’on supprime pour une raison ou
une autre un animal de la base, il n’est pas question de réutiliser son numéro d’identité.
Ce champ ne pourra bien sûr pas être NULL, sinon il perdrait toute son utilité.
La clé primaire d’une table est une contrainte d’unicité, composée d’une ou plusieurs colonnes.
La clé primaire d’une ligne permet d’identifier de manière unique cette ligne dans la
table. Si l’on parle de la ligne dont la clé primaire vaut x, il ne doit y avoir aucun doute quant à
la ligne dont on parle. Lorsqu’une table possède une clé primaire (et il est extrêmement conseillé
de définir une clé primaire pour chaque table créée), celle-ci doit être définie.
Cette définition correspond exactement au numéro d’identité dont nous venons de parler. Nous
définirons donc id comme la clé primaire de la table Animal, en utilisant les mots-clés PRIMARY
KEY(id).
Lorsque vous insérerez une nouvelle ligne dans la table, MySQL vérifiera que vous insérez bien un
id, et que cet id n’existe pas encore dans la table. Si vous ne respectez pas ces deux contraintes,
MySQL n’insérera pas la ligne et vous renverra une erreur.
Par exemple, dans le cas où vous essayez d’insérer un id qui existe déjà, vous obtiendrez l’erreur
suivante :
63
I. MySQL et les bases du langage SQL
Je n’en dirai pas plus pour l’instant sur les clés primaires mais j’y reviendrai de manière détaillée
dans la seconde partie de ce cours.
I.5.2.3. Auto-incrémentation
Il faut donc, pour chaque animal, décider d’une valeur pour id. Le plus simple, et le plus logique,
est de donner le numéro 1 au premier individu enregistré, puis le numéro 2 au second, etc.
Mais si vous ne vous souvenez pas quel numéro vous avez utilisé en dernier, pour insérer un
nouvel animal il faudra récupérer cette information dans la base, ensuite seulement vous pourrez
ajouter une ligne en lui donnant comme id le dernierid utilisé + 1. C’est bien sûr faisable, mais
c’est fastidieux… Heureusement, il est possible de demander à MySQL de faire tout ça pour
nous !
Comment ? En utilisant l’auto-incrémentation des colonnes. Incrémenter veut dire ”ajouter
une valeur fixée”. Donc, si l’on déclare qu’une colonne doit s’auto-incrémenter (grâce au mot-
clé AUTO_INCREMENT), plus besoin de chercher quelle valeur on va mettre dedans lors de la
prochaine insertion. MySQL va chercher ça tout seul comme un grand en prenant la dernière
valeur insérée et en l’incrémentant de 1.
I.[Link]. MyISAM
C’est le moteur par défaut. Les commandes d’insertion et sélection de données sont particulière-
ment rapides sur les tables utilisant ce moteur. Cependant, il ne gère pas certaines fonctionnalités
importantes comme les clés étrangères, qui permettent de vérifier l’intégrité d’une référence d’une
table à une autre table (voir la deuxième partie du cours) ou les transactions, qui permettent de
réaliser des séries de modifications ”en bloc” ou au contraire d’annuler ces modifications (voir la
cinquième partie du cours).
64
I. MySQL et les bases du langage SQL
I.[Link]. InnoDB
Plus lent et plus gourmand en ressources que MyISAM, ce moteur gère les clés étrangères et les
transactions. Étant donné que nous nous servirons des clés étrangères dès la deuxième partie,
c’est celui-là que nous allons utiliser. De plus, en cas de crash du serveur, il possède un système
de récupération automatique des données.
Pour qu’une table utilise le moteur de notre choix, il suffit d’ajouter ceci à la fin de la commande
de création :
ENGINE = moteur;
En remplaçant bien sûr ”moteur” par le nom du moteur que nous voulons utiliser, ici InnoDB :
ENGINE = INNODB;
I.5.4.1. Syntaxe
Par souci de clarté, je vais diviser l’explication de la syntaxe de CREATE TABLE en deux. La
première partie vous donne la syntaxe globale de la commande, et la deuxième partie s’attarde
sur la description des colonnes créées dans la table.
65
I. MySQL et les bases du langage SQL
Le IF NOT EXISTS est facultatif (d’où l’utilisation de crochets [ ]), et a le même rôle que dans
la commande CREATE DATABASE : si une table de ce nom existe déjà dans la base de données,
la requête renverra un warning plutôt qu’une erreur si IF NOT EXISTS est spécifié. Ce n’est pas
non plus une erreur de ne pas préciser la clé primaire directement à la création de la table. Il
est tout à fait possible de l’ajouter par la suite. Nous verrons comment un peu plus tard.
Pour définir une colonne, il faut donc donner son nom en premier, puis sa description. La
description est constituée au minimum du type de la colonne. Exemple :
nom VARCHAR(30),
sexe CHAR(1)
C’est aussi dans la description que l’on précise si la colonne peut contenir NULL ou pas (par
défaut, NULL est autorisé). Exemple :
L’auto-incrémentation se définit également à cet endroit. Notez qu’il est également possible
de définir une colonne comme étant la clé primaire dans sa description. Il ne faut alors plus
l’indiquer après la définition de toutes les colonnes. Je vous conseille néanmoins de ne pas
l’indiquer à cet endroit, nous verrons plus tard pourquoi.
Enfin, on peut donner une valeur par défaut au champ. Si lorsque l’on insère une ligne, aucune
valeur n’est précisée pour le champ, c’est la valeur par défaut qui sera utilisée. Notez que si une
66
I. MySQL et les bases du langage SQL
colonne est autorisée à contenir NULL et qu’on ne précise pas de valeur par défaut, alors NULL
est implicitement considéré comme valeur par défaut.
Exemple :
!
Une valeur par défaut DOIT être une constante. Ce ne peut pas être une fonction (comme
par exemple la fonction NOW() qui renvoie la date et l’heure courante).
Si l’on met tout cela ensemble pour créer la table Animal (je rappelle que nous utiliserons le
moteur InnoDB), on a donc :
i
Je n’ai pas gardé la valeur par défaut pour le champ espece, car je trouve que ça n’a pas
beaucoup de sens dans ce contexte. C’était juste un exemple pour vous montrer la syntaxe.
I.5.4.3. Vérifications
Au cas où vous ne me croiriez pas (et aussi un peu parce que cela pourrait vous être utile un
jour), voici deux commandes vous permettant de vérifier que vous avez bien créé une jolie table
Animal avec les six colonnes que vous vouliez.
67
I. MySQL et les bases du langage SQL
I.5.5.1. En résumé
— Avant de créer une table, il faut définir ses colonnes. Pour cela, il faut donc déterminer
le type de chacune des colonnes et décider si elles peuvent ou non contenir NULL (c’est-à-
dire ne contenir aucune donnée).
— Chaque table créée doit définir une clé primaire, donc une colonne qui permettra
d’identifier chaque ligne de manière unique.
— Le moteur d’une table définit la manière dont elle est gérée. Nous utiliserons le moteur
InnoDB, qui permet notamment de définir des relations entre plusieurs tables.
68
I.6. Modification d’une table
La création et la suppression de tables étant acquises, parlons maintenant des requêtes permettant
de modifier une table. Plus précisément, ce chapitre portera sur la modification des colonnes
d’une table (ajout d’une colonne, modification, suppression de colonnes). Il est possible de
modifier d’autres éléments (des contraintes, ou des index par exemple), mais cela nécessite des
notions que vous ne possédez pas encore, aussi n’en parlerai-je pas ici.
Notez qu’idéalement, il faut penser à l’avance à la structure de votre base et créer toutes vos
tables directement et proprement, de manière à ne les modifier qu’exceptionnellement.
Dans la seconde partie de ce tutoriel, nous devrons faire quelques modifications sur notre table
Animal, mais en attendant, je vous propose d’utiliser la table suivante, si vous avez envie de
tester les différentes possibilités d’ALTER TABLE :
69
I. MySQL et les bases du langage SQL
I.6.2.1. Ajout
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_colonne correspond à
la même chose que lorsque l’on crée une table. Il contient le type de donnée et éventuellement
NULL ou NOT NULL, etc.
Ajoutons une colonne date_insertion à notre table de test. Il s’agit d’une date, donc une colonne
de type DATE convient parfaitement. Disons que cette colonne ne peut pas être NULL (si c’est
dans la table, ça a forcément été inséré). Cela nous donne :
I.6.2.2. Suppression
Comme pour les ajouts, le mot COLUMN est facultatif. Par défaut, MySQL considérera que vous
parlez d’une colonne.
Exemple : nous allons supprimer la colonne date_insertion, que nous remercions pour son
passage éclair dans le cours.
70
I. MySQL et les bases du langage SQL
Vous pouvez utiliser la commande suivante pour changer le nom d’une colonne :
Par exemple, pour renommer la colonne nom en prenom, vous pouvez écrire
Attention, la description de la colonne doit être complète, sinon elle sera également modifiée. Si
vous ne précisez pas NOT NULL dans la commande précédente, prenom pourra contenir NULL,
alors que du temps où elle s’appelait nom, cela lui était interdit.
Les mots-clés CHANGE et MODIFY peuvent être utilisés pour changer le type de donnée de la
colonne, mais aussi changer la valeur par défaut ou ajouter/supprimer une propriété AUTO_IN
CREMENT. Si vous utilisez CHANGE, vous pouvez, comme on vient de le voir, renommer la colonne
en même temps. Si vous ne désirez pas la renommer, il suffit d’indiquer deux fois le même nom.
Voici les syntaxes possibles :
71
I. MySQL et les bases du langage SQL
Il existe pas mal d’autres possibilités et combinaisons pour la commande ALTER TABLE mais
en faire la liste complète ne rentre pas dans le cadre de ce cours. Si vous ne trouvez pas votre
bonheur ici, je vous conseille de le chercher dans la documentation officielle .
I.6.3.3. En résumé
— La commande ALTER TABLE permet de modifier une table
— Lorsque l’on ajoute ou modifie une colonne, il faut toujours préciser sa (nouvelle) des-
cription complète (type, valeur par défaut, auto-incrément éventuel)
72
I.7. Insertion de données
Ce chapitre est consacré à l’insertion de données dans une table. Rien de bien compliqué, mais
c’est évidemment crucial. En effet, que serait une base de données sans données ?
Nous verrons entre autres :
— comment insérer une ligne dans une table ;
— comment insérer plusieurs lignes dans une table ;
— comment exécuter des requêtes SQL écrites dans un fichier (requêtes d’insertion ou
autres) ;
— comment insérer dans une table des lignes définies dans un fichier de format particulier.
Et pour terminer, nous peuplerons notre table Animal d’une soixantaine de petites bestioles sur
lesquelles nous pourrons tester toutes sortes de tortures requêtes dans la suite de ce tutoriel.
Je rappelle pour les distraits que notre table Animal est composée de six colonnes : id, espece,
sexe, date_naissance, nom et commentaires.
Voici donc la syntaxe à utiliser pour insérer une ligne dans Animal, sans renseigner les colonnes
pour lesquelles on donne une valeur (implicitement, MySQL considère que l’on donne une valeur
pour chaque colonne de la table).
Deuxième exemple : cette fois-ci, on ne connaît pas le sexe et on n’a aucun commentaire à
faire sur la bestiole :
73
I. MySQL et les bases du langage SQL
Troisième et dernier exemple : on donne NULL comme valeur d’id, ce qui en principe est
impossible puisque id est défini comme NOT NULL et comme clé primaire. Cependant, l’auto-
incrémentation fait que MySQL va calculer tout seul comme un grand quel id il faut donner à
la ligne (ici : 3).
Dans la requête, nous allons donc écrire explicitement à quelle(s) colonne(s) nous donnons une
valeur. Ceci va permettre deux choses.
— On ne doit plus donner les valeurs dans l’ordre de création des colonnes, mais dans l’ordre
précisé par la requête.
74
I. MySQL et les bases du langage SQL
— On n’est plus obligé de donner une valeur à chaque colonne ; plus besoin de NULL lorsqu’on
n’a pas de valeur à mettre.
Quelques exemples :
Ce qui vous donne trois animaux supplémentaires (donc six en tout, il faut suivre !)
Si vous avez plusieurs lignes à introduire, il est possible de le faire en une seule requête de la
manière suivante :
Bien entendu, vous êtes alors obligés de préciser les mêmes colonnes pour chaque entrée, quitte
à mettre NULL pour certaines. Mais avouez que ça fait quand même moins à écrire !
75
I. MySQL et les bases du langage SQL
— Le fait d’avoir l’un à côté de l’autre la colonne et la valeur qu’on lui attribue (nom =
'Bobo') rend la syntaxe plus lisible et plus facile à manipuler. En effet, ici il n’y a que
six colonnes, mais imaginez une table avec 20, voire 100 colonnes. Difficile d’être sûrs
que l’ordre dans lequel on a déclaré les colonnes est bien le même que l’ordre des valeurs
qu’on leur donne…
— Elle est très semblable à la syntaxe de UPDATE, que nous verrons plus tard et qui permet
de modifier des données existantes. C’est donc moins de choses à retenir (mais bon, une
requête de plus ou de moins, ce n’est pas non plus énorme…)
!
Cependant, cette syntaxe alternative présente également des défauts, qui pour moi sont
plus importants que les avantages apportés. C’est pourquoi je vous déconseille de l’utiliser.
Je vous la montre surtout pour que vous ne soyez pas surpris si vous la rencontrez quelque
part.
Écrire toutes les commandes à la main dans la console, ça peut vite devenir pénible. Quand c’est
une petite requête, pas de problème. Mais quand vous avez une longue requête, ou beaucoup de
requêtes à faire, ça peut être assez long.
Une solution sympathique est d’écrire les requêtes dans un fichier texte, puis de dire à MySQL
d’exécuter les requêtes contenues dans ce fichier. Et pour lui dire ça, c’est facile :
SOURCE [Link];
76
I. MySQL et les bases du langage SQL
Ou
\. [Link];
Ces deux commandes sont équivalentes et vont exécuter le fichier [Link]. Il n’est pas
indispensable de lui donner l’extension .sql, mais je préfère le faire pour repérer mes fichiers
SQL directement. De plus, si vous utilisez un éditeur de texte un peu plus évolué que le bloc-note
(ou textEdit sur Mac), cela colorera votre code SQL, ce qui vous facilitera aussi les choses.
Attention : si vous ne lui indiquez pas le chemin, MySQL va aller chercher votre fichier dans le
dossier où vous étiez lors de votre connexion.
Exemple : on donne le chemin complet vers le fichier
Par fichier formaté, j’entends un fichier qui suit certaines règles de format. Un exemple typique
serait les fichiers .csv. Ces fichiers contiennent un certain nombre de données et sont organisés
en tables. Chaque ligne correspond à une entrée, et les colonnes de la table sont séparées par
un caractère défini (souvent une virgule ou un point-virgule). Ceci par exemple, est un format
csv :
Ce type de fichier est facile à produire (et à lire) avec un logiciel de type tableur (Microsoft
Excel, ExcelViewer, Numbers…). La bonne nouvelle est qu’il est aussi possible de lire ce type de
fichier avec MySQL, afin de remplir une table avec les données contenues dans le fichier.
La commande SQL permettant cela est LOAD DATA INFILE, dont voici la syntaxe :
77
I. MySQL et les bases du langage SQL
Le mot-clé LOCAL sert à spécifier si le fichier se trouve côté client (dans ce cas, on utilise LOCAL)
ou côté serveur (auquel cas, on ne met pas LOCAL dans la commande). Si le fichier se trouve
du côté serveur, il est obligatoire, pour des raisons de sécurité, qu’il soit dans le répertoire de
la base de données, c’est-à-dire dans le répertoire créé par MySQL à la création de la base de
données, et qui contient les fichiers dans lesquels sont stockées les données de la base. Pour
ma part, j’utiliserai toujours LOCAL, afin de pouvoir mettre simplement mes fichiers dans mon
dossier de travail.
Les clauses FIELDS et LINES permettent de définir le format de fichier utilisé. FIELDS se
rapporte aux colonnes, et LINES aux lignes (si si ). Ces deux clauses sont facultatives. Les
valeurs que j’ai mises ci-dessus sont les valeurs par défaut.
Si vous précisez une clause FIELDS, il faut lui donner au moins une des trois ”sous-clauses”.
— TERMINATED BY, qui définit le caractère séparant les colonnes, entre guillemets bien sûr.
'\t' correspond à une tabulation. C’est le caractère par défaut.
— ENCLOSED BY, qui définit le caractère entourant les valeurs dans chaque colonne (vide
par défaut).
— ESCAPED BY, qui définit le caractère d’échappement pour les caractères spéciaux. Si par
exemple vous définissez vos valeurs comme entourées d’apostrophes, mais que certaines
valeurs contiennent des apostrophes, il faut échapper ces apostrophes ”internes” afin
qu’elles ne soient pas considérées comme un début ou une fin de valeur. Par défaut, il
s’agit du \ habituel. Remarquez qu’il faut lui-même l’échapper dans la clause.
De même pour LINES, si vous l’utilisez, il faut lui donner une ou deux sous-clauses.
— STARTING BY, qui définit le caractère de début de ligne (vide par défaut).
— TERMINATED BY, qui définit le caractère de fin de ligne ('\n' par défaut, mais attention :
les fichiers générés sous Windows ont souvent '\r\n' comme caractère de fin de ligne).
La clause IGNORE nombre LINES permet… d’ignorer un certain nombre de lignes. Par exemple,
si la première ligne de votre fichier contient les noms des colonnes, vous ne voulez pas l’insérer
dans votre table. Il suffit alors d’utiliser IGNORE 1 LINES.
Enfin, vous pouvez préciser le nom des colonnes présentes dans votre fichier. Attention évidem-
ment à ce que les colonnes absentes acceptent NULL ou soient auto-incrémentées.
Si je reprends mon exemple, en imaginant que nous ayons une table Personne contenant les
colonnes id (clé primaire auto-incrémentée), nom, prenom, date_naissance et adresse (qui peut
être NULL).
Si ce fichier est enregistré sous le nom [Link], il vous suffit d’exécuter la commande
suivante pour enregistrer ces trois lignes dans la table Personne, en spécifiant si nécessaire le
chemin complet vers [Link] :
78
I. MySQL et les bases du langage SQL
Voici donc le code que je vous demande de copier-coller dans votre éditeur de texte préféré, puis
de le sauver sous le nom [Link] (ou un autre nom de votre choix).
SOURCE [Link];
À nouveau, copiez-collez le texte ci-dessous dans votre éditeur de texte, et enregistrez le fichier.
Cette fois, sous le nom [Link].
!
Attention, le fichier doit se terminer par un saut de ligne !
79
I. MySQL et les bases du langage SQL
Et hop ! Vous avez plus d’une cinquantaine d’animaux dans votre table.
Si vous voulez vérifier, je rappelle que vous pouvez utiliser la commande suivante, qui vous
affichera toutes les données contenues dans la table Animal.
I.7.4.3. En résumé
— Pour insérer des lignes dans une table, on utilise la commande
— Si l’on ne précise pas à quelles colonnes on donne une valeur, il faut donner une valeur à
toutes les colonnes, et dans le bon ordre.
— Il est possible d’insérer plusieurs lignes en une fois, en séparant les listes de valeurs par
une virgule.
— Si l’on a un fichier texte contenant des requêtes SQL, on peut l’exécuter en utilisant
SOURCE nom_fichier; ou \. nom_fichier;.
— La commande LOAD DATA [LOCAL] INFILE permet de charger des données dans une
table à partir d’un fichier formaté (.csv par exemple).
80
I. MySQL et les bases du langage SQL
Contenu masqué
Retourner au texte.
Retourner au texte.
81
I.8. Sélection de données
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 ;
— élimination des données en double ;
— récupération de seulement une partie des données (uniquement les 10 premières lignes,
par exemple).
Motivés ? Alors c’est parti !!!
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.
Par exemple, si l’on veut sélectionner l’espèce, le nom et le sexe des animaux présents dans la
table Animal, on utilisera :
82
I. MySQL et les bases du langage SQL
Si vous désirez sélectionner toutes les colonnes, vous pouvez utiliser le caractère * dans votre
requête :
SELECT *
FROM Animal;
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.
Le désavantage est bien sûr que vous avez plus à écrire, mais le jeu en vaut la chandelle.
Comme vous avez pu le constater, les requêtes SELECT faites jusqu’à présent sélectionnent toutes
les lignes de la table. Or, bien souvent, on ne veut qu’une partie des données. Dans la suite de
ce chapitre, nous allons voir ce que nous pouvons ajouter à cette requête SELECT pour faire des
sélections à l’aide de critères.
SELECT *
FROM Animal
WHERE espece='chien';
i
Comme ’chien’ est une chaîne de caractères, je dois bien sûr l’entourer de guillemets.
83
I. MySQL et les bases du langage SQL
Les opérateurs de comparaison sont les symboles que l’ont utilise pour définir les critères de
recherche (le = dans notre exemple précédent). Huit opérateurs simples peuvent être utilisés.
Opérateur Signification
= égal
< inférieur
<= inférieur ou égal
> supérieur
>= supérieur ou égal
<> ou != différent
<=> égal (valable pour NULL aussi)
Exemples :
SELECT *
FROM Animal
WHERE date_naissance < '2008-01-01'; -- Animaux nés avant 2008
SELECT *
FROM Animal
WHERE espece <> 'chat'; -- Tous les animaux sauf les chats
Tout ça c’est bien beau, mais comment faire si on veut les chats et les chiens par exemple ?
Faut-il faire deux requêtes ? Non bien sûr, il suffit de combiner les critères. Pour cela, il faut des
opérateurs logiques, qui sont au nombre de quatre :
84
I. MySQL et les bases du langage SQL
I.[Link]. AND
Je veux sélectionner toutes les chattes. Je veux donc sélectionner les animaux qui sont à la fois
des chats ET des femelles. J’utilise l’opérateur AND :
SELECT *
FROM Animal
WHERE espece='chat'
AND sexe='F';
-- OU
SELECT *
FROM Animal
WHERE espece='chat'
&& sexe='F';
I.[Link]. OR
Sélection des tortues et des perroquets. Je désire donc obtenir les animaux qui sont des tortues
OU des perroquets :
SELECT *
FROM Animal
WHERE espece='tortue'
OR espece='perroquet';
-- OU
SELECT *
FROM Animal
WHERE espece='tortue'
|| espece='perroquet';
i
Je vous conseille d’utiliser plutôt OR que ||, car dans la majorité des SGBDR (et dans la
norme SQL), l’opérateur || sert à la concaténation. C’est-à-dire à rassembler plusieurs
chaînes de caractères en une seule. Il vaut donc mieux prendre l’habitude d’utiliser OR, au
cas où vous changeriez un jour de SGBDR (ou tout simplement parce que c’est une bonne
habitude).
I.[Link]. NOT
85
I. MySQL et les bases du langage SQL
SELECT *
FROM Animal
WHERE sexe='F'
AND NOT espece='chien';
-- OU
SELECT *
FROM Animal
WHERE sexe='F'
AND ! espece='chien';
I.[Link]. XOR
Sélection des animaux qui sont soit des mâles, soit des perroquets (mais pas les deux) :
SELECT *
FROM Animal
WHERE sexe='M'
XOR espece='perroquet';
Et voilà pour les opérateurs logiques. Rien de bien compliqué, et pourtant, c’est souvent source
d’erreur. Pourquoi ? Tout simplement parce que tant que vous n’utilisez qu’un seul opérateur
logique, tout va très bien. Mais on a souvent besoin de combiner plus de deux critères, et c’est
là que ça se corse.
Lorsque vous utilisez plusieurs critères, et que vous devez donc combiner plusieurs opérateurs
logiques, il est extrêmement important de bien structurer la requête. En particulier, il faut placer
des parenthèses au bon endroit. En effet, cela n’a pas de sens de mettre plusieurs opérateurs
logiques différents sur un même niveau.
Petit exemple simple :
Critères : rouge AND vert OR bleu
Qu’accepte-t-on ?
— Ce qui est rouge et vert, et ce qui est bleu ?
— Ou ce qui est rouge et, soit vert soit bleu ?
Dans le premier cas, [rouge, vert] et [bleu] seraient acceptés. Dans le deuxième, c’est [rouge,
vert] et [rouge, bleu] qui seront acceptés, et non [bleu].
En fait, le premier cas correspond à (rouge AND vert) OR bleu, et le deuxième cas à rouge AND
(vert OR bleu).
Avec des parenthèses, pas moyen de se tromper sur ce qu’on désire sélectionner !
86
I. MySQL et les bases du langage SQL
I.[Link]. Exercice/Exemple
Vous vous souvenez sans doute de la liste des opérateurs de comparaison que je vous ai présentée
(sinon, retournez au début de la partie sur la clause WHERE). Vous avez probablement été un peu
étonnés de voir dans cette liste l’opérateur <=> : égal (valable aussi pour NULL). D’autant plus
que j’ai fait un peu semblant de rien et ne vous ai pas donné d’explication sur cette mystérieuse
précision ”aussi valable pour NULL” . Mais je vais me rattraper maintenant ! En fait, c’est
très simple, le marqueur NULL (qui représente donc ”pas de valeur”) est un peu particulier. En
effet, vous ne pouvez pas tester directement colonne = NULL. Essayons donc :
SELECT *
FROM Animal
WHERE nom = NULL; -- sélection des animaux sans nom
SELECT *
FROM Animal
87
I. MySQL et les bases du langage SQL
Comme vous pouvez vous en douter après ma petite introduction, ces deux requêtes ne renvoient
pas les résultats que l’on pourrait espérer. En fait, elles ne renvoient aucun résultat. C’est donc
ici qu’intervient notre opérateur de comparaison un peu spécial <=> qui permet de reconnaître
NULL. Une autre possibilité est d’utiliser les mots-clés IS NULL, et si l’on veut exclure les NULL :
IS NOT NULL. Nous pouvons donc réécrire nos requêtes, correctement cette fois-ci :
SELECT *
FROM Animal
WHERE nom <=> NULL; -- sélection des animaux sans nom
-- OU
SELECT *
FROM Animal
WHERE nom IS NULL;
SELECT *
FROM Animal
WHERE commentaires IS NOT NULL; -- sélection des animaux pour
lesquels un commentaire existe
date_nais- commen
id espece sexe nom
sance taires
2010-04-05 Mordille
1 chien M Rox
13:43:00 beaucoup
2010-10-03 Né sans oreill
5 chat NULL Choupi
16:44:00 gauche
2009-06-13 Carapace
6 tortue F Bobosse
08:17:00 bizarre
Pas de queu
2006-05-19
35 chat M Raccou depuis la nai
16:56:00
sance
2006-03-15
52 tortue F Redbul Insomniaque
14:26:00
2008-03-15
55 tortue M Relou Surpoids
18:45:00
88
I. MySQL et les bases du langage SQL
SELECT *
FROM Animal
WHERE espece='chien'
ORDER BY date_naissance;
Et hop ! Vos données sont triées, les plus vieux chiens sont récupérés en premier, les jeunes à la
fin.
Tout ça c’est bien beau, j’ai mes chiens triés du plus vieux au plus jeune. Et si je veux le
contraire ? Pour déterminer le sens du tri effectué, SQL possède deux mots-clés : ASC pour
ascendant, et DESC pour descendant. Par défaut, si vous ne précisez rien, c’est un tri ascendant
qui est effectué : du plus petit nombre au plus grand, de la date la plus ancienne à la plus
récente, et pour les chaînes de caractères et les textes, c’est l’ordre alphabétique normal qui est
utilisé. Si par contre vous utilisez le mot DESC, l’ordre est inversé : plus grand nombre d’abord,
date la plus récente d’abord, et ordre anti-alphabétique pour les caractères.
i
Petit cas particulier : les ENUM sont des chaînes de caractères, mais sont triés selon l’ordre
dans lequel les possibilités ont été définies. Si par exemple on définit une colonne exemple
ENUM('a', 'd', 'c', 'b'), l’ordre ASC sera ’a’, ’d’, ’c’ puis ’b’ et l’ordre DESC ’b’, ’c’,
’d’ suivi de ’a’.
SELECT *
FROM Animal
WHERE espece='chien'
AND nom IS NOT NULL
ORDER BY nom DESC;
89
I. MySQL et les bases du langage SQL
Il est également possible de trier sur plusieurs colonnes. Par exemple, si vous voulez que les
résultats soient triés par espèce et, dans chaque espèce, triés par date de naissance, il suffit de
donner les deux colonnes correspondantes à ORDER BY :
SELECT *
FROM Animal
ORDER BY espece, date_naissance;
!
L’ordre dans lequel vous donnez les colonnes est important, le tri se fera d’abord sur la
première colonne donnée, puis sur la seconde, etc.
SELECT espece
FROM Animal;
En effet, vous allez bien récupérer toutes les espèces que vous possédez, mais si vous avez 500
chiens, vous allez récupérer 500 lignes ’chien’. Un peu embêtant lorsque la table devient bien
remplie.
Heureusement, il y a une solution : le mot-clé DISTINCT. Ce mot-clé se place juste après SELECT
et permet d’éliminer les doublons.
Ceci devrait gentiment vous ramener quatre lignes avec les quatre espèces qui se trouvent dans
la table. C’est quand même plus clair non ?
Attention cependant, pour éliminer un doublon, il faut que toute la ligne sélectionnée soit
égale à une autre ligne du jeu de résultats. Ça peut paraître logique, mais cela en perd plus d’un.
90
I. MySQL et les bases du langage SQL
Ne seront donc prises en compte que les colonnes que vous avez précisées dans votre SELECT.
Uniquement espece donc, dans notre exemple.
I.8.5.1. Syntaxe
Exemple :
SELECT *
FROM Animal
ORDER BY id
LIMIT 6 OFFSET 0;
SELECT *
FROM Animal
ORDER BY id
LIMIT 6 OFFSET 3;
Avec la première requête, vous devriez obtenir six lignes, les six plus petits id puisque nous
n’avons demandé aucun décalage (OFFSET 0).
date_nais- commen
id espece sexe nom
sance taires
2010-04-05 Mordille
1 chien M Rox
13:43:00 beaucoup
2010-03-24
2 chat NULL Roucky NULL
02:23:00
2010-09-13
3 chat F Schtroumpfette NULL
15:02:00
2009-08-03
4 tortue F NULL NULL
05:12:00
2010-10-03 Né sans oreill
5 chat NULL Choupi
16:44:00 gauche
91
I. MySQL et les bases du langage SQL
2009-06-13 Carapace
6 tortue F Bobosse
08:17:00 bizarre
Par contre, dans la deuxième, vous récupérez toujours six lignes, mais vous devriez commencer
au quatrième plus petit id, puisqu’on a demandé un décalage de trois lignes.
date_nais- commen
id espece sexe nom
sance taires
2009-08-03
4 tortue F NULL NULL
05:12:00
2010-10-03 Né sans oreill
5 chat NULL Choupi
16:44:00 gauche
2009-06-13 Carapace
6 tortue F Bobosse
08:17:00 bizarre
2008-12-06
7 chien F Caroline NULL
05:18:00
2008-09-11
8 chat M Bagherra NULL
15:38:00
2010-08-23
9 tortue NULL NULL NULL
05:18:00
SELECT *
FROM Animal
ORDER BY id
LIMIT 10;
SELECT *
FROM Animal
ORDER BY id
LIMIT 10 OFFSET 0;
MySQL accepte une autre syntaxe pour la clause LIMIT. Ce n’est cependant pas la norme SQL
donc idéalement vous devriez toujours utiliser la syntaxe officielle. Vous vous apercevrez toutefois
que cette syntaxe est énormément usitée, je ne pouvais donc pas ne pas la mentionner
SELECT *
FROM Animal
ORDER BY id
92
I. MySQL et les bases du langage SQL
Tout comme pour la syntaxe officielle, le décalage n’est pas obligatoire, et vaudra 0 par défaut.
Si vous le précisez, n’oubliez pas la virgule entre le décalage et le nombre de lignes désirées.
I.8.5.3. En résumé
— La commande SELECT permet d’afficher des données.
— La clause WHERE permet de préciser des critères de sélection.
— Il est possible de trier les données grâce à ORDER BY, selon un ordre ascendant (ASC) ou
descendant (DESC).
— Pour éliminer les doublons, on utilise le mot-clé DISTINCT, juste après SELECT.
— LIMIT nb_lignes OFFSET decalage permet de sélectionner uniquement nb_lignes de
résultats, avec un certain décalage.
Contenu masqué
SELECT *
FROM Animal
WHERE date_naissance > '2009-12-31'
OR
( espece='chat'
AND
( sexe='M'
OR
( sexe='F' AND date_naissance < '2007-06-01' )
)
);
Retourner au texte.
93
I.9. Élargir les possibilités de la clause
WHERE
Dans le chapitre précédent, vous avez découvert la commande SELECT, ainsi que plusieurs
clauses permettant de restreindre et d’ordonner les résultats selon différents critères. Nous
allons maintenant revenir plus particulièrement sur la clause WHERE. Jusqu’ici, les conditions
permises par WHERE étaient très basiques. Mais cette clause offre bien d’autres possibilités parmi
lesquelles :
— la comparaison avec une valeur incomplète (chercher les animaux dont le nom commence
par une certaine lettre par exemple) ;
— la comparaison avec un intervalle de valeurs (entre 2 et 5 par exemple) ;
— la comparaison avec un ensemble de valeurs (comparaison avec 5, 6, 10 ou 12 par exemple).
Opérateur Signification
= égal
< inférieur
<= inférieur ou égal
> supérieur
>= supérieur ou égal
<> ou != différent
<=> égal (valable pour NULL aussi)
À l’exception de <=> qui est un peu particulier, ce sont les opérateurs classiques, que vous
retrouverez dans tous les langages informatiques. Cependant, il arrive que ces opérateurs ne
soient pas suffisants. En particulier pour des recherches sur des chaînes de caractères. En effet,
comment faire lorsqu’on ne sait pas si le mot que l’on recherche est au singulier ou au pluriel
par exemple ? Ou si l’on cherche toutes les lignes dont le champ ”commentaires” contient un
mot particulier ?
Pour ce genre de recherches, l’opérateur LIKE est très utile, car il permet de faire des recherches
en utilisant des ”jokers”, c’est-à-dire des caractères qui représentent n’importe quel caractère.
94
I. MySQL et les bases du langage SQL
Comment faire si vous cherchez une chaîne de caractères contenant ’%’ ou ’’ ? Évidemment, si
vous écrivez LIKE '%' ou ‘LIKE ’’, MySQL vous donnera absolument toutes les chaînes
de caractères dans le premier cas, et toutes les chaînes de 0 ou 1 caractère dans
le deuxième. Il faut donc signaler à MySQL que vous ne désirez pas utiliser ||%||
ou ||_|| en tant que joker, mais bien en tant que caractère de recherche. Pour
ça, il suffit de mettre le caractère d'échappement ||\||, dont je vous ai déjà
parlé, devant le ’%’ou le’_’‘.
Exemple :
SELECT *
FROM Animal
WHERE commentaires LIKE '%\%%';
Résultat :
date_nais- commen
id espece sexe nom
sance taires
Sourde de
2008-04-20
42 chat F Bilba l’oreille droite
03:20:00
80%
C’est logique, mais je précise quand même (et puis ça fait un petit rappel) : l’opérateur logique
NOT est utilisable avec LIKE. Si l’on veut rechercher les animaux dont le nom ne contient pas la
lettre a , on peut donc écrire :
95
I. MySQL et les bases du langage SQL
SELECT *
FROM Animal
WHERE nom NOT LIKE '%a%';
Vous l’aurez peut-être remarqué en faisant des essais, LIKE 'chaîne de caractères' n’est
pas sensible à la casse (donc aux différences majuscules-minuscules). Pour rappel, ceci est dû à
l’interclassement. Nous avons gardé l’interclassement par défaut du jeu de caractère UTF-8, qui
n’est pas sensible à la casse. Si vous désirez faire une recherche sensible à la casse, vous pouvez
définir votre chaîne de recherche comme une chaîne de type binaire, et non plus comme une
simple chaîne de caractères :
SELECT *
FROM Animal
WHERE nom LIKE '%Lu%'; -- insensible à la casse
SELECT *
FROM Animal
WHERE nom LIKE BINARY '%Lu%'; -- sensible à la casse
Vous pouvez bien entendu utiliser des chiffres dans une chaîne de caractères. Après tout, ce
sont des caractères comme les autres. Par contre, utiliser LIKE sur un type numérique (INT par
exemple), c’est déjà plus étonnant. Et pourtant, MySQL le permet. Attention cependant, il
s’agit bien d’une particularité MySQL, qui prend souvent un malin plaisir à étendre la norme
SQL pure.
LIKE '1%' sur une colonne de type numérique trouvera donc des nombres comme 10, 1000,
153
SELECT *
FROM Animal
WHERE id LIKE '1%';
96
I. MySQL et les bases du langage SQL
SELECT *
FROM Animal
WHERE date_naissance <= '2009-03-23'
AND date_naissance >= '2008-01-05';
Ça fonctionne très bien. Cependant, SQL dispose d’un opérateur spécifique pour les intervalles,
qui pourrait vous éviter les erreurs d’inattention classiques (< au lieu de > par exemple) en
plus de rendre votre requête plus lisible et plus performante : BETWEEN minimum AND maximum
(between signifie ”entre” en anglais). La requête précédente peut donc s’écrire :
SELECT *
FROM Animal
WHERE date_naissance BETWEEN '2008-01-05' AND '2009-03-23';
BETWEEN peut s’utiliser avec des dates, mais aussi avec des nombres (BETWEEN 0 AND 100) ou
avec des chaînes de caractères (BETWEEN 'a' AND 'd') auquel cas c’est l’ordre alphabétique
qui sera utilisé (toujours insensible à la casse sauf si l’on utilise des chaînes binaires : BETWEEN
BINARY 'a' AND BINARY 'd'). Bien évidemment, on peut aussi exclure un intervalle avec NOT
BETWEEN.
SELECT *
FROM Animal
WHERE nom = 'Moka'
OR nom = 'Bilba'
OR nom = 'Tortilla'
OR nom = 'Balou'
97
I. MySQL et les bases du langage SQL
OR nom = 'Dana'
OR nom = 'Redbul'
OR nom = 'Gingko';
Un peu fastidieux non ? Eh bien réjouissez-vous, car IN est dans la place ! Cet opérateur vous
permet de faire des recherches parmi une liste de valeurs. Parfait pour nous donc, qui voulons
rechercher les animaux correspondant à une liste de noms. Voici la manière d’utiliser IN :
SELECT *
FROM Animal
WHERE nom IN ('Moka', 'Bilba', 'Tortilla', 'Balou', 'Dana',
'Redbul', 'Gingko');
I.9.3.1. En résumé
— L’opérateur LIKE permet de faire des recherches approximatives, grâce aux deux caractères
”joker” : '%' (qui représente 0 ou plusieurs caractères) et '_' (qui représente 0 ou 1
caractère).
— L’opérateur BETWEEN permet de faire une recherche sur un intervalle. WHERE colonne
BETWEEN a AND b étant équivalent à WHERE colonne >= a AND colonne <= b.
— Enfin, l’opérateur IN permet de faire une recherche sur une liste de valeurs.
98
I.10. Suppression et modification de
données
Vous savez comment insérer des données, vous savez comment les sélectionner et les ordonner
selon les critères de votre choix, il est temps maintenant d’apprendre à les supprimer et les
modifier ! Avant cela, un petit détour par le client mysqldump, qui vous permet de sauvegarder
vos bases de données. Je ne voudrais en effet pas vous lâcher dans le chapitre de suppression de
données sans que vous n’ayez la possibilité de faire un backup de votre base. Je vous connais,
vous allez faire des bêtises, et vous direz encore que c’est de ma faute…
99
I. MySQL et les bases du langage SQL
Lancez la commande suivante pour sauvegarder elevage dans votre dossier courant (c’est-à-dire
le dossier dans lequel vous étiez au moment de la connexion) :
Puis, allez voir dans le dossier. Vous devriez y trouver un fichier elevage_sauvegarde.sql. Ouvrez-
le avec un éditeur de texte. Vous pouvez voir nombre de commandes SQL qui servent à la
création des tables de la base de données, ainsi qu’à l’insertion des données. S’ajoutent à cela
quelques commandes qui vont sélectionner le bon encodage, etc.
i
Vous pouvez bien entendu sauver votre fichier dans un autre dossier que celui où vous êtes
au moment de lancer la commande. Il suffit pour cela de préciser le chemin vers le dossier
désiré. Ex : C:\"Mes Documents"\mysql\sauvegardes\elevage_sauvegarde.sql
au lieu de elevage_sauvegarde.sql
La base de données est donc sauvegardée. Notez que la commande pour créer la base elle-même
n’est pas sauvée. Donc, si vous effacez votre base par mégarde, il vous faut d’abord recréer
la base de données (avec CREATE DATABASE nom_base), puis exécuter la commande suivante
(dans la console) :
USE nom_base;
source fichier_de_sauvegarde.sql;
Donc :
USE elevage;
source elevage_sauvegarde.sql;
100
I. MySQL et les bases du langage SQL
i
Vous savez maintenant sauvegarder de manière simple vos bases de données. Notez que
je ne vous ai donné ici qu’une manière d’utiliser mysqldump. En effet, cette commande
possède de nombreuses options. Si cela vous intéresse, je vous renvoie à la documentation
de MySQL qui sera toujours plus complète que moi.
I.10.2. 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.
Par exemple : Zoulou est mort, paix à son âme ... Nous allons donc le retirer de la base de
données.
×
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).
I.10.3. Modification
La modification des données se fait grâce à la commande UPDATE, dont la syntaxe est la
suivante :
101
I. MySQL et les bases du langage SQL
UPDATE nom_table
SET col1 = val1 [, col2 = val2, ...]
[WHERE ...];
Par exemple, vous étiez persuadés que ce petit Pataud était un mâle mais, quelques semaines
plus tard, vous vous rendez compte de votre erreur. Il vous faut donc modifier son sexe, mais
aussi son nom. Voici la requête qui va vous le permettre :
UPDATE Animal
SET sexe='F', nom='Pataude'
WHERE id=21;
Vérifiez d’abord chez vous que l’animal portant le numéro d’identification 21 est bien Pataud.
J’utilise ici la clé primaire (donc id) pour identifier la ligne à modifier, car c’est la seule manière
d’être sûr que je ne modifierai que la ligne que je désire. En effet, il est possible que plusieurs
animaux aient pour nom ”Pataud”. Ce n’est a priori pas notre cas, mais prenons tout de suite
de bonnes habitudes.
!
Tout comme pour la commande DELETE, si vous omettez la clause WHERE dans un UPDATE,
la modification se fera sur toutes les lignes de la table. Soyez prudents !
La requête suivante changerait donc le commentaire de tous les animaux stockés dans la table
Animal (ne l’exécutez pas).
UPDATE Animal
SET commentaires='modification de toutes les lignes';
I.10.3.1. En résumé
— Le client mysqldump est un programme qui permet de sauvegarder facilement ses bases
de données.
— La commande DELETE permet de supprimer des données.
— La commande UPDATE permet de modifier des données.
102