vendredi, octobre 20, 2006

MySQL le fait aussi !

Dans la société où je travaille, je vois de plus en plus des erreurs et des mauvaises habitudes chez plusieurs développeurs (parfois par paresse [http://fr.wikipedia.org/wiki/Paresse_intellectuelle] et parfois par ignorance) :
  • Pas mal de fois, je vois un développeur qui se connecte à deux sessions sur le même serveur, une pour MySQL et l'autre pour les commandes Shell, pour autant MySQL fait les deux!
  • Pas mal de fois, je vois un développeur qui lance une grosse requête à MySQL, et puis il reste 10 min à copier le résultat affiché.
  • Pas mal de fois, je vois un développeur qui tape 10 fois successive la touche Entrée dans le shell MySQL, rien que pour nettoyer la l'écran.
  • Pas mal de fois, je vois un développeur qui tape Ctrl-C et arrête le pauvre programme, pour ne pas exécuter la requête qu'il vient de saisir.
  • ...

Pourtant MySQL le dit a chaque fois qu'on se connecte :

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is XYZ to server version: 5.0.18

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.


Tapez 'help' en ligne de commande, et MySQL va afficher ce qu'il sait faire :

  • ego (\G) : Send command to MySQL server, display result vertically.
  • Si vous voulez que MySQL affiche le résultat verticalement, faites-le en entrant \G (c'est plus lisible!)
mysql> SELECT * FROM db.table\G

  • system (\!) : Execute a system shell command.
  • Si vous voulez que MySQL exécute une commande système (y compris le clear screen), faites-le en commentant par \!
mysql> system ls -la
mysql> \! clear
mysql> \! scp ~/export.dmp user@host:/home/user/

  • clear (\c) Clear command.
  • Si vous décidez d'annuler une commande que vous etes en train de taper, faites-le en entrant \c : [1]
mysql> SELECT
-> USER()
-> \c
mysql>

  • tee (\T) : Append everything into given outfile.
  • Pour enregistrer les requêtes et leur résultat, utilisez la commande tee. Toutes les données affichées a l'écran seront ajoutées a un fichier donne. 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ésactive interactivement avec la commande notée. Exécuter tee a nouveau re-active le log. Sans paramètre, le fichier précèdent sera utilise. Notez que tee envoie les requêtes dans le fichier après chaque commande, juste avant que MySQL ne l'affiche. [1]
mysql> tee ~/mySQLlog
mysql> notee

  • pager (\P) : Set PAGER [to_pager]. Print the query results via PAGER.
  • 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 indique sera utilise. Sinon, le pager sera celui indique en ligne de commande, ou stdout si aucun pager n'était indique. [1]
  • ...

[1] : le manuel de référence du système de base de données MySQL. MySQL Server Books Online .