3 Tutoriels d'introduction
Manuel de Référence MySQL 4.1 : Version Française
. Connexion et déconnexion au serveur ->Entrer des requêtes . Création et utilisation d'une base de données . Obtenir des informations à propos des bases de données et des tables . Utilisation de mysql en mode batch . Exemples de requêtes usuelles . Requêtes du projet Twin . Utilisation de MySQL avec Apache
|
3.2 Entrer des requêtes
Assurez-vous d'être connecté au serveur, comme expliqué précédemment dans cette section.
Faire ceci ne sélectionnera pas une base par lui même, mais c'est normal.
A ce stade, il est important de découvrir la façon dont sont publiées les requêtes,
pour ensuite pouvoir créer des tables, y insérer et rechercher des données.
Cette section décrit les principes de base pour entrer une commande, en utilisant plusieurs
requêtes que vous pouvez essayer pour vous familiariser avec la façon dont
mysql
fonctionne.
Voilà une commande simple qui demande au serveur de vous donner son numéro de version
et la date courante. Entrez-la comme suit, juste après l'invite
mysql>
puis
pressez Enter :
mysql> SELECT VERSION(), CURRENT_DATE; +--------------+--------------+ | VERSION() | CURRENT_DATE | +--------------+--------------+ | 3.22.20a-log | 1999-03-19 | +--------------+--------------+ 1 row in set (0.01 sec) mysql>
|
La requête révèle plusieurs choses à propos de
mysql
:
-
Une commande consiste normalement en une commande SQL suivie d'un point-virgule.
(Il y a quelques cas ou le point-virgule n'est pas requis.
QUIT
,
mentionnée plus tôt, en fait partie. Nous verrons les autres plus tard.)
-
Lorsque vous entrez une commande,
mysql
l'envoi au serveur pour l'exécution
et affiche le résultat, puis affiche un autre
mysql>
pour indiquer qu'il attend
une autre commande.
-
mysql
affiche le résultat des requêtes dans une table (lignes et colonnes).
La première ligne contient le nom des colonnes. Les lignes suivantes constituent le
résultat de la requête. Normalement, les titres des colonnes sont les noms des champs
des tables de la base de données que vous avez récupérés. Si vous récupérez la valeur
d'une expression au lieu d'une colonne (comme dans l'exemple précédent),
mysql
nomme la colonne en utilisant l'expression elle-même.
-
mysql
vous indique combien de lignes ont été
retournées et combien de temps d'exécution la requête
a pris, ce qui vous donnera une approximation des performances du serveur.
Ces valeurs sont imprécises car elles représentent le temps
logiciel (et non le temps processeur ou matériel), et qu'elles sont
affectées par des facteurs tels que la charge du serveur ou
l'accessibilité du réseau. (Dans un soucis de
brièveté, la ligne contenant ``
rows in set
''
n'est plus montrée dans les exemples suivants de ce chapitre.)
Les mots-clef peuvent être entrés sous n'importe quelle forme de casse. Les requêtes
suivantes sont équivalentes :
mysql> SELECT VERSION(), CURRENT_DATE; mysql> select version(), current_date; mysql> SeLeCt vErSiOn(), current_DATE;
|
Voilà une autre requête. Elle montre que vous pouvez utiliser
mysql
en tant que simple calculatrice :
mysql> SELECT SIN(PI()/4), (4+1)*5; +-------------+---------+ | SIN(PI()/4) | (4+1)*5 | +-------------+---------+ | 0.707107 | 25 | +-------------+---------+
|
Les commandes vues jusqu'à présent ont été relativement courtes,
et tenaient sur une seule ligne. Vous pouvez même entrer plusieurs requêtes
sur une seule ligne.
Il suffit de terminer chacune d'elle par un point-virgule :
mysql> SELECT VERSION(); SELECT NOW(); +--------------+ | VERSION() | +--------------+ | 3.22.20a-log | +--------------+ +---------------------+ | NOW() | +---------------------+ | 1999-03-19 00:15:33 | +---------------------+
|
Une commande ne doit pas être obligatoirement sur une seule ligne ; les commandes
qui exigent plusieurs lignes ne sont pas un problème.
mysql
détermine où se situe la fin de votre commande en recherchant
le point-virgule de terminaison, et pas l'extrémité de la commande entrée.
(Dans d'autres termes,
mysql
accepte des formats libres d'entrée :
il collecte les lignes entrées mais ne les exécute qu'une fois le point-virgule trouvé.)
Voilà une seule requête sur plusieurs lignes :
mysql> SELECT -> USER() -> , -> CURRENT_DATE; +--------------------+--------------+ | USER() | CURRENT_DATE | +--------------------+--------------+ | joesmith@localhost | 1999-03-18 | +--------------------+--------------+
|
Dans cet exemple, notez comment l'invite change de
mysql>
à
->
après avoir entré la première ligne d'une requête multi-lignes.
C'est la façon dont
mysql
indique qu'il n'a pas vu de requête complète
et qu'il attend la fin de celle-ci. L'invite est votre ami en vous fournissant
la rétroactivité. Si vous utilisez cette rétroactivité, vous vous rendrez toujours
compte de ce que
mysql
attend.
Si vous décidez d'annuler une commande que vous êtes en train de taper, faites-le
en entrant
\c
:
mysql> SELECT -> USER() -> \c mysql>
|
Ici aussi, portez votre attention sur l'invite. Elle se transforme à nouveau en
mysql>
après que vous ayez entré
\c
, vous informant que
mysql
est prêt pour une nouvelle requête.
Le tableau suivant montre les différentes invites que vous pourrez voir et résume
leur signification quand à l'état dans lequel se trouve
mysql
:
Invite
|
Signification
|
mysql>
|
Prêt pour une nouvelle commande.
|
->
|
En attente de la ou des lignes terminant la commande.
|
'>
|
En attente de la prochaine ligne collectant une chaîne
commencée par un guillemet simple (
'''
).
|
">
|
En attente de la prochaine ligne collectant une chaîne
commencée par un guillemet double (
'"'
).
|
`>
|
En attente de la prochaine ligne collectant une chaîne
commencée par un guillemet oblique (
'`'
).
|
Les commandes sur plusieurs lignes sont la plupart du temps des accidents, lorsque vous voulez
faire une commande sur une seule ligne et que vous oubliez le point-virgule de fin. Dans ce cas,
mysql
attend la suite de votre saisie :
Si cela vous arrive (vous pensez que votre requête est complète mais
la seule réponse est l'invite
->
), il est fort probable que
mysql
attende le point-virgule. Si vous ne notez pas ce que l'invite vous indique,
vous pourriez patienter pendant longtemps avant de réaliser ce que vous devez faire.
Entrez un point-virgule pour compléter la requête, et
mysql
devrait l'exécuter :
mysql> SELECT USER() -> ; +--------------------+ | USER() | +--------------------+ | joesmith@localhost | +--------------------+
|
L'invite
'>
ainsi que
">
apparaissent durant l'entrée de chaîne.
Dans MySQL, vous pouvez écrire une chaîne entourée du caractère
'''
ou bien
'"'
(par exemple,
'Bonjour'
or
"Au Revoir"
), et
mysql
vous laisse entrer une chaîne qui peut être sur plusieurs lignes.
Lorsque vous voyez une invite comme
'>
ou
">
, cela signifie que vous avez entré une ligne contenant le caractère
'''
ou
'"'
, mais vous n'avez pas encore entré le caractère correspondant qui termine votre chaîne.
C'est pratique si vous entrez réellement une chaîne à lignes multiples, mais est-ce probable ? Pas vraiment.
Plus souvent, les invites
'>
et
">
indiquent que vous avez, par inadvertance, oublié un caractère de fermeture.
Par exemple :
mysql> SELECT * FROM ma_table WHERE nom = "Smith AND age < 30; ">
|
Si vous entrez cette requête
SELECT
, puis appuyez sur Enter et attendez le
résultat, rien ne se passera. Au lieu de vous demander pourquoi la requête met si
longtemps à s'exécuter, remarquez que l'invite de commande s'est transformée en
">
. Cela indique que
mysql
attend de voir la fin d'une chaîne de
caractères non-terminée. (Voyez-vous l'erreur dans cette requête ? Il manque le
second guillemet à la suite de
"Smith
.)
Que faire ? Le plus simple est d'annuler la commande. Toutefois, vous ne pouvez vous
contenter de taper
\c
dans ce cas-là, car
mysql
l'interprète comme
une partie de la chaîne qu'il est en train de collecter ! A la place, entrez le
second guillemet (pour que
mysql
sache que vous avez fini la chaîne),
puis entrez
\c
:
mysql> SELECT * FROM my_table WHERE name = "Smith AND age < 30; "> "\c mysql>
|
L'invite se change à nouveau en
mysql>
, indiquant que
mysql
est prêt pour une nouvelle requête.
Il est important de savoir ce que les invites
'>
et
">
signifient,
car si vous avez entré par erreur une chaîne non terminée, toutes les lignes
suivantes que vous entrerez seront ignorées par
mysql
, même une ligne
contenant
QUIT
! Cela peut prêter à confusion, spécialement si vous ne
savez pas que vous devez fournir le guillemet fermant avant de pouvoir annuler
la commande courante.
|