| 8.3 mysql , l'outil en ligne de commande
 8 MySQL Scripts clients et utilitaires
 Manuel de Référence MySQL 4.1 : Version Française
 
 ->Commandes mysql
 . Comment exécuter des commandes SQL depuis un fichier texte
 . Conseils avec mysql
 
 
 | 
  8.3.1 Commandes mysql 
 
mysql
  envoie des requêtes SQL que vous avez saisie au serveur, pour exécution.
Il y a aussi des commandes que le client  
mysql
  interprête. Si vous tapez ' 
help
 ' 
en ligne de commande,  
mysql
  va afficher les commandes qu'il supporte : 
 Les commandes  
edit
 ,  
nopager
 ,  
pager
  et  
system
 
ne fonctionnent que sous Unix.| 
mysql> help
 MySQL commands:
 ?         (\h)    Synonym for `help'.
 clear     (\c)    Clear command.
 connect   (\r)    Reconnect to the server.
 Optional arguments are db and host.
 delimiter (\d)    Set query delimiter.
 edit      (\e)    Edit command with $EDITOR.
 ego       (\G)    Send command to mysql server,
 display result vertically.
 exit      (\q)    Exit mysql. Same as quit.
 go        (\g)    Send command to mysql server.
 help      (\h)    Display this help.
 nopager   (\n)    Disable pager, print to stdout.
 notee     (\t)    Don't write into outfile.
 pager     (\P)    Set PAGER [to_pager].
 Print the query results via PAGER.
 print     (\p)    Print current command.
 prompt    (\R)    Change your mysql prompt.
 quit      (\q)    Quit mysql.
 rehash    (\#)    Rebuild completion hash.
 source    (\.)    Execute an SQL script file.
 Takes a file name as an argument.
 status    (\s)    Get status information from the server.
 system    (\!)    Execute a system shell command.
 tee       (\T)    Set outfile [to_outfile].
 Append everything into given outfile.
 use       (\u)    Use another database.
 Takes database name as argument.
 | 
  
La commande  
status
  donne des détails sur la connexion et le serveur
utilisés. Si vous fonctionnez en mode  
--safe-updates
 ,  
status
  
va aussi afficher les valeurs des variables de  
mysql
  qui affectent
vos requêtes.
Pour enregistrer les requêtes et leur résultat, utilisez la commande  
tee
 .
Toutes les données affichées à l'écran seront ajoutées à un fichier donné. Cela
peut être très pratique pour déboguer. Vous pouvez activer cette fonctionnalité
en ligne de commande, avec l'option  
--tee
 , ou interactivement avec la commande
 
tee
 . Le fichier  
tee
  peut être désactivé interactivement avec la commande 
 
notee
 . Exécuter  
tee
  à nouveau ré-active le log. 
Sans paramètre, le fichier précédent sera utilisé. Notez que  
tee
 
envoie les requêtes dans le fichier après chaque commande, juste avant que 
 
mysql
  ne l'affiche. 
La lecture et la recherche dans les résultats de requêtes en mode interactif
est possible en utilisant les programmes Unix  
less
 ,  
more
 , ou
tout autre programme similaire, avec l'option  
--pager
 . Si vous ne spécifier
par de valeur d'option,  
mysql
  regarde la valeur de la variable d'environnement
 
PAGER
 , et utilise ce pager. Vous pouvez aussi l'activer interactivement 
avec la commande  
pager
  et la désactiver avec  
nopager
 .  La commande 
prend un argument optionnel : s'il est fournit, le programme de pager indiqué
sera utilisé. Sinon, le pager sera celui indiqué en ligne de commande, ou 
 
stdout
  si aucun pager n'était indiqué.
La pagination de sortie ne fonctionne que sous Unix, car elle utilise la
fonction  
popen()
 , qui n'existe pas sous Windows. Pour Windows, la commande
 
tee
  peut être utilisée pour sauver le résultat, même si ce n,est pas
aussi pratique que  
pager
  pour naviguer dans le résultat. 
Quelques conseils avec la commande  
pager
  :
 
Vous pouvez aussi combiner les deux fonctions ci-dessus : activer le 
 
tee
 , spécifier le  
pager
  ' 
less
 ' et vous serez capable de
naviguer dans les résultats avec le  
less
  Unix, tout en enregistrant tous
les résultats dans un fichier. La différence entre le  
tee
  d'Unix 
utilisé avec le  
pager
  et le  
tee
  intégré du client  
mysql
 , 
est que le  
tee
  intégré fonctionne même si vous n'avez pas de  
tee
 
Unix disponible. Le  
tee
  enregistre tout ce qui est affiché à l'écran,
alors que le  
tee
  Unix utilisé avec  
pager
  n'en note pas autant.
Enfin, le  
tee
  interactif est plus facile à activer et désactiver, lorsque
vous souhaitez enregistrer un résultat dans un fichier, mais que vous voulez
désactiver cette fonctionnalité à d'autres moments.
Vous pouvez l'utiliser pour écrire les résultats dans un fichier :  
Vous pouvez lui passer les options que le page comprendra :| 
mysql> pager cat > /tmp/log.txt
 | 
 | 
mysql> pager less -n -i -S
 | 
Dans le précédent exemple, notez l'option  
-S
 . Vous la trouverez pratique
pour naviguer dans des résultats très larges. Parfois, un résultat très large
est difficile à lire à l'écran. L'option  
-S
  de  
less
  rend le résultat
plus lisible, car vous pouvez aussi scroller horizontalement, avec les 
flèches de droite et de gauche. Vous pouvez aussi utiliser interactivement 
 
-S
  dans  
less
  pour activer ou désactiver la navigation horizontale.
Pour plus d'informations, voyez le manuel de  
less
  : 
Vous pouvez spécifier des commandes de pages très complexe :  
Dans cet exemple, la commande va envoyer les résultats de la commande dans
deux fichiers différents, dans deux dossiers différents, placés sur deux
devis  
/dr1
  et  
/dr2
 , mais affichera toujours le résultat à l'écran
via  
less
 .| 
mysql> pager cat | tee /dr1/tmp/res.txt \| tee /dr2/tmp/res2.txt | less -n -i -S
 | 
  
Depuis MySQL version 4.0.2, il est possible de modifier l'invite de commande
de  
mysql
 . La chaîne de définition de l'invite de commande accepte 
les séquences suivantes : 
 
| Option | Description |  
| \v | version de mysqld |  
| \d | database en cours |  
| \h | hôte MySQL |  
| \p | port de connexion |  
| \u | nom d'utilisateur |  
| \U | Identifiant complet 
username@host |  
| \\ | '\' |  
| \n | nouvelle ligne |  
| \t | tabulation |  
| \ | espace |  
| \_ | espace |  
| \R | heure 24h (0-23) |  
| \r | heure 12h (1-12) |  
| \m | minutes |  
| \y | année sur deux chiffres |  
| \Y | année sur quatre chiffres |  
| \D | format de date complet |  
| \s | secondes |  
| \w | jour de la semaine en trois lettres (Mon, Tue, ...) |  
| \P | am/pm |  
| \o | mois au format numérique |  
| \O | mois en trois lettres (Jan, Feb, ...) |  
| \c | compteur du nombre de commande |  
'\'
  suivi de n'importe quelle lettre représente la lettre littéralement.
Si vous spécifiez une commande  
prompt
  sans argument,  
mysql
  utilisera
l'invite de commande par défaut de  
mysql>
 . 
Vous pouvez modifier l'invite de commande comme ceci : 
 
 Variable d'environnement 
Vous pouvez utiliser la variable d'environnement  
MYSQL_PS1
 ,
en lui donnant la chaîne d'invite. Par exemple :  
| 
shell> export MYSQL_PS1="(\u@\h) [\d]> "
 | 
 Utiliser le fichier d'optionsVous pouvez configurer l'invite de commandes  
prompt
 
dans le fichier d'options MySQL, comme  
/etc/my.cnf
  ou  
.my.cnf
 , 
dans le groupe  
mysql
 . Par exemple :  
Dans cet exemple, notez que les anti-slash sont doublés.
Si vous configurez l'invite de commande  
prompt
  dans un fichier d'options,
il est recommandé de doubler les anti-slash, lorsque vous utilisez
des options. Il y a des recoupements entre les séquences protégées et 
les options. Ces séquences sont listées dans  Utiliser les fichiers d'options .
Ce recoupement peut vous causer des problèmes avec des anti-slashs uniques.
Par exemple,  
\s
  sera interprété comme un espace, plutôt que comme le 
nombre de secondes. La valeur suivante montre comment définir une invite
avec l'heure au format  
HH:MM:SS>
  :| 
[mysql]prompt=(\\u@\\h) [\\d]>\\_
 | 
 | 
[mysql]prompt="\\r:\\m:\\s> "
 | 
 Utilisez une option de ligne de commande
 
Vous pouvez utiliser l'option  
--prompt
  dans la commande  
mysql
 .
Par exemple :
 | 
shell> mysql --prompt="(\u@\h) [\d]> "(user@host) [database]>
 | 
 Interactivement
 
Vous pouvez aussi utiliser la commande  
prompt
  (ou  
\R
 ) depuis le client
pour modifier interactivement l'invite de commande. Par exemple : 
 | 
mysql> prompt (\u@\h) [\d]>\_PROMPT set to '(\u@\h) [\d]>\_'
 (user@host) [database]>
 (user@host) [database]> prompt
 Returning to default PROMPT of mysql>
 mysql>
 | 
 |