¿Cuántas veces les ha pasado ésto?

MySQL [(none)]> select u.User,Db from mysql.user u,mysql.db d whereCtrl-C -- exit!
Aborted
root@debian:~#

A mí me ha pasado decenas, cientas, miles de veces... Me ocurre todo el tiempo ya que es un acto reflejo propio de usuarios de sh/Bash. Cada vez que quiero limpiar el prompt del cliente MySQL presiono Ctrl+C y termino abortando la sesión. Algo realmente muy molesto.

Este artículo explica cómo limpiar el prompt del cliente MySQL sin abortar la sesión emulando el uso de Ctrl+C en la consola.

En sh/Bash y la mayoría de las consolas se utiliza el atajo Ctrl+C para interrumpir la ejecución del proceso en primer plano actual (enviar la señal SIGINT). Pero también es frecuentemente utilizado como un mecanismo rápido para cancelar un comando que aún no ha sido ejecutado. Es decir, limpiar el prompt sin ejecutar nada y obtener un prompt limpio:

root@debian:~# poweroff^C
root@debian:~# 

Sin embargo, cuando se está trabajando con en el cliente MySQL, este atajo termina abortando la sesión (ya que se envía SIGINT al proceso de MySQL cliente).

Ahora bien, ¿cómo es posible limpiar el prompt de MySQL? Es decir, cancelar la consulta SQL sin ejecutar y obtener un prompt vacío. Hay dos posibilidades.

La primera consiste en agregar el comando \c en cualquier parte de la consulta SQL y presionar enter:

MySQL [(none)]> select u.User,Db from mysql.user u,mysql.db d where u.User=d.User\c
MySQL [(none)]> 

Aunque el comando \c debe estar antes de cualquier punto y coma (;), comentario (#) y fuera de cualquier comillado ('). De lo contrario la consulta se ejecutará de todos modos. Con lo cual es una técnica muy poco confiable y peligrosa cuando se trata de consultas que hacen modificaciones en los datos o las estructuras (UPDATE, DELETE, DROP, ALTER, etc.).

Por esta razón no confío en \c ni la suelo utilizar.

La segunda alternativa es mucho más adecuada y similar al uso de Ctrl+C en las terminales y consiste en recurrir a los atajos de teclado del cliente MySQL Ctrl+U (para borrar desde el comienzo hasta la posición del cursor) y Ctrl+K (para borrar desde el cursor hasta el final de la línea).

Por ejemplo, el cursor se encuentra en la posición final:

Al presionar Ctrl+U se borra completamente hasta el inicio del prompt:

Ahora el cursor se encuentra en la sentencia WHERE de la consulta:

Al presionar Ctrl+K se borra hasta el final:

Ahora sólo queda educar al cerebro (lo más difícil) para que presione Ctrl+U en vez de Ctrl+C en el prompt de MySQL.

Compartí este artículo