Sean bienvenidos a este post, hoy veremos como hacer unos atajos, utilizar algunos comandos del shell, algunas opciones para editar y como escribir menos para nuestros querys.
Estos son simples consejos pero no de orden obligatorio, se puede tomar o dejar, vamos a repasar algunos opciones vistos en otros post. Empecemos con mysqlshow, este es un comando de shell para visualizar las bases de datos y las tablas de esa base, su estructura es asi:
mysqlshow -u usuario_de_mysql -p base_de_datos <tabla>
Donde usuario de mysql, es el usuario para ingresar, la opcion -p es para solicitar la clave del usuario anterior y finalmente la base para mostrar sus tablas, en el caso de adicionar la tabla (este es opcional) esta nos mostrara todas las columnas de la tabla y las acciones permitidas en la misma, les muestro un ejemplo de salida:

Una opcion interesante, pero no por esto segura, es utilizar un archivo dentro del home (en el caso de linux) y en el caso de Windows (o DOS) en el raiz, llamado my.cnf. En este archivo guardaremos los tres datos basicos de nuestra conexion, es decir el host, el usuario y la clave. El archivo debe tener la siguiente estructura:
[client] host=la direccion del equipo user=el usuario password=la clave
Para hacer esto deben generar un archivo en el caso de linux llamarlo .my.cnf, esto generara un archivo oculto del S.O, en el caso de los sistemas operativos de Microsoft, para ocultar el archivo deberan setearlo como oculto en Windows (a traves de las propiedades) o por DOS con el comando:
attrib +h
En el caso de linux deben utilizar el comando:
chmod 600 .my.cnf
o
chmod u=rw,g=,o= .my.cnf
Este hara que el archivo sea solamente abierto por el usuario y no por el resto, en Windows pueden hacer algo similar si el formato del disco es NTFS, si es FAT no, pero si queres saber como setearle permisos a un archivo en NTFS te recomiendo el siguiente video
Si pudieron hacer el archivo y guardarlo prueben de ejecutar este comando nuevamente pero sin los parametros del usuario:
mysqlshow bases de datos <tabla>
Sorpresa, obtuvieron el mismo resultado sin necesidad de ingresar el usuario y la clave pero como dije antes, suponiendo el ingreso de alguien ajeno, donde pueda llegar hasta el archivo y con tu usuario de linux, este podria tener acceso a sus bases de datos, por lo que da cierta vulnerabilidad (o por lo menos deja una puerta abierta) por no mencionarla en Windows, este metodo lo recomiendo para las personas que se conecten por ssh a un servidor (y obviamente no de forma local) para DOS (y/o Windows) yo no lo utilizaria porque es mas facil de acceder a ese archivo.
En linux, tenemos disponible, habitualmente el historial de los comandos ejecutados para poder acceder a ellos tienen varias opciones, una es con los flechas para arriba y abajo, otra es con el signo de exclamacion (!) este nos repetira el ultimo comando coincidente con el criterio utilizado, por ejemplo: !my (deberia ejecutar el ultimo comando con mysql o similar) y tambien se puede usar el comando history en conjunto con grep, les muestro un ejemplo:
history | grep mysql
No voy a ahondar mucho en estos dos comandos de linux, porque estamos con el mysql, pero hare una breve descripcion (especialmente del grep) de ambos comandos para que lo entiendan, el history nos traera todos los comandos o lineas escritas en el shell y el comando grep nos permitira filtrar las lineas de devolucion del history con la palabra mysql, esto se puede usar con otros programas en los cuales no recuerdan como lo ejecutaron (p.e. history | grep vbox, para el VirtualBox), en DOS existe algo parecido llamado DOSkey que se debia ejecutar aparte, o se debia agregar en el autoexec.bat, para que guarde los comandos desde el dia cuando se ejecuto hasta el momento de apagado el equipo y a su vez no tiene como filtrarlos. Otra opcion es utilizar, si el shell te lo permite, los alias para simplificar nuestra conexion a las bases, por ejemplo:
alias tutorial 'mysql tutorial'
En caso de que falle o no se los tome porque es bash, utilicenlo asi:
alias tutorial='mysql tutorial'
Esto es obviamente si tienen generado el archivo con los datos el usuario pero en caso de no haberlo hecho asi lo equivalente seria asi:
alias tutorial='mysql -h direccion del equipo -u usuario -p tutorial'
Para cualquiera de los dos casos, verifiquen en el linux como generar los alias, otra forma de acortar es creando un script para Linux (o Unix) o un batch para dos o windows, para el caso de Linux:
#! /bin/sh exec mysql -h direccion_del_equipo -u usuario -p base_a_conectar
En este caso pueden crear un archivo llamado tutorial, a este le ingresan el ejemplo anterior, lo guardan y le dan permisos de ejecucion con el chmod. Para el caso de windows, pueden hacer:
@echo off mysql -h direccion_del_equipo -u usuario -p base_a_conectar
Generan un archivo de texto, le introducen este ejemplo, lo guardan como tutorial.bat (por ejemplo) y listo. Con esa extension los sistemas operativos de Microsoft saben que es un proceso de ejecucion por lotes. Esto nos permite ahorrar tipeo porque seria solamente ejecutar el nombre del archivo, o en el caso de Windows hacer un doble click sobre el mismo.
Para nuestro siguiente caso vamos a aprender como utilizar el editor de linea del cliente de Mysql, esto nos permitira volver a repetir una linea movernos a traves de ella, etc. Les dejo el listado de las acciones posibles:
- CTRL+P, Flecha Arriba / Llama a la linea anterior
- CTRL+N, Flecha Abajo / Volver a la linea siguiente
- CTRL+B, Flecha Izquierda / Desplazar el cursor a la izquierda
- CTRL+F, Flecha Derecha / Desplazar el cursor a la derecha
- ESC CTRL+B / Desplazar atras una palabra
- ESC CTRL+F / Desplazar adelante una palabra
- CTRL+A / Desplazar el cursor al principio de la linea
- CTRL+E / Desplazar el cursor al final de la linea
- CTRL+D / Borra el caracter debajo del cursor
- Borrar / Borra el caracter a la izquierda del cursor
- ESC D / Borrar palabra
- ESC Retroceso / Borra la palabra a la izquierda del cursor
- CTRL+K / Borra todo desde el cursor hasta el fin de la linea
- CTRL+_ / Deshacer el ultimo cambio, puede repetirse
Estos atajos son ideales para cuando ejecutamos un query y este nos devuelve un error, mediante ellos podemos volver a repetir la linea buscar el error y modificarlo. Lo van a usar mas de lo que creen, otra opcion por ejemplo si estan utilizando un programa como el PuTTY para Windows, o una terminal de Linux para conectarse a un servidor pueden tener varias consultas guardadas en formato texto, copiar y pegar dentro de la ventana y esta se va a ejecutar automaticamente, siempre que este bien generada. Tambien recuerden utilizar el modo batch tanto para las consultas como los ingresos de datos, por ejemplo nosotros en este post, hicimos la creacion de la tabla presidente con un archivo llamado presidente.sql donde copiamos toda la secuencia de comando create table, y luego desde la terminal invocamos de esta forma:
mysql -u usuario -p tutorial < president.sql
Esta instancia en la base tutorial crea la tabla presidente, esto tambien se puede utilizar para ejecutar una consulta de busqueda, veamos este query:
select concat(nombre," ",apellido) as Nombre, nacimiento as "Fecha de Nacimiento", fallecimiento as "Fecha de Fallecimiento" from presidente where fallecimiento is not null;
Primero hagan un archivo llamado test.sql y despues agreguen esta consulta en el archivo, guardenla, ejecutemos el comando y veamos su salida:
tinchicus@dbn001vrt:~$ mariadb -t -u tinchicus -p tutorial < test.sql
Enter password:
+------------------------+---------------------+------------------------+
| Nombre | Fecha de Nacimiento | Fecha de Fallecimiento |
+------------------------+---------------------+------------------------+
| Bartolome Mitre | 1821-06-26 | 1906-01-19 |
| Marcos Paz | 1811-10-07 | 1868-01-02 |
| Domingo Sarmiento | 1811-02-15 | 1888-09-11 |
| Nicolas Avellaneda | 1837-10-03 | 1885-11-25 |
| Vicente Lopez y Planes | 1785-05-03 | 1856-10-10 |
| Manuel Dorrego | 1787-06-11 | 1828-12-13 |
| Santiago Derqui | 1809-06-21 | 1867-11-05 |
| Julio Roca | 1843-06-17 | 1914-10-19 |
| Miguel Juarez Celman | 1844-07-29 | 1909-04-14 |
| Juan Manuel Rosas | 1793-03-30 | 1877-03-14 |
+------------------------+---------------------+------------------------+
tinchicus@dbn001vrt:~$
Observen el parametro -t para mostrar la salida con tabuladores, es decir de la misma forma como si fuera en el cliente, de lo contrario lo muestra con espacios. Ahora si en vez de verlo uds. necesitaran guardarlo en un archivo deben ejecutarlo asi:
mariadb -t -u usuario -p tutorial < test.sql > salida
Y en vez de mostrarlo en pantalla, esa salida la guardara en un archivo para ser utilizado por otra aplicacion. Y por ultimo, nosotros como vimos en este post, podemos hacer cargas masivas con LOAD DATA o mysqlimport. Por ejemplo, uds. tienen una planilla de Excel con toda la informacion a cargar en una tabla, se podria copiar y pegar en un archivo de texto con los tabuladores de la planilla, en el orden coincidente con las columnas de la tabla, esto se guarda y despues desde el cliente se puede utilizar este comando:
LOAD DATA LOCAL INFILE “archivo” INTO TABLE nombre de la tabla;
o sino por linea de comandos:
mysqlimport –local nombre de la base nombre de la tabla.txt
En ambos casos se cargara la informacioon en la tabla. Esto nos puede evitar tener que escribir cada una de las lineas insert para cada registro. Obviamente no siempre se va a tener los datos pero en algunos tipos de cargas si van a tener la posibilidad de una bajada de otra base, o una carga hecha por una persona en una planilla.
En resumen, hoy hemos visto algunos consejos para mejorar nuestro trabajo en la bases de datos, como poder manipular la informacion sin necesidad de trabajar sobre las mismas como vimos anteriormente, espero que estos consejos les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.
Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.


Tambien podes donar
Es para mantenimiento del sitio, gracias!
$1.50