Report inadequate content

Mysql, Trucos in Harecoded

Expand

Rellenar una columna con Hash aleatorio en MySQL

Tenemos unos cuantos cientos de datos y queremos crear un hash para poder acceder a ellos de forma directa y cifrada.

Imagina, por ejemplo, la típica tabla de usuarios en la que un campo contiene un hash para guardar en cookies y hacer el autologin por cookie.

Al crear el nuevo atributo este queda vacío así que necesitarás esta pequeña consulta para generar códigos hash de forma aleatoria y muy rápida:

UPDATE `users` SET autologin_hash = MD5(RAND()) WHERE autologin_hash IS NULL;

Fácil eh? ;)

 

Expand

Mysql: Llenar tabla con datos aleatorios (de una lista)

En alguna ocasión nos hemos encontrado con la necesidad de actualizar / insertar registors de una tabla con elementos aleatoris a partir de una lista.

Esta operación es especialmente útil cuando queremos crear datos "dummy" para entornos de desarrollo.

El ejemplo de este post es para MySql:

UPDATE files f SET license_type = (SELECT ELT(0.5 + RAND() * 2, 'Free', 'Try' ) )
Expand

Exportar una consulta de Mysql en un fichero CSV

Si tienes una tabla o consulta que quieres exportar a CSV tienes dos maneras muy fáciles de hacerlo. La primera es dentro de la consola mysql utilizando después del SELECT la opción INTO OUTFILE. Esto escribirá en el fichero externo que indiques el contenido de la consulta. La segunda opción es desde la propia línea de comandos utilizando la opción "Batch".

Diferencias entre método 1 y 2: El primero permite especificar la terminación de las líneas en el csv así como si quieres comillas en cada campo. El segundo escribe en el CSV los campos delimitados por tabulación sin más. La segunda es la opción más senclla y rápida para la mayoría de casos.

Opción 1: Exportar una consulta SQL a CSV desde la consola Mysql

Si por ejemplo quieres que cada campo de tu consulta se separe con punto y coma y cada registro por un salto de línea windows (\r\n) o Unix (\n), lo que vendría a ser un CSV vaya!, solo tienes que hacer algo como:

SELECT
        *
FROM
        tu_tabla
WHERE
        condicion
-- Aqui viene la exportación
INTO OUTFILE
        '/tmp/fichero_salida.csv'
        FIELDS TERMINATED BY ';'
        OPTIONALLY ENCLOSED BY '\"'
        LINES TERMINATED BY '\r\n';

Puedes cambiar el formato fácilmente cambiando los caracteres. En este caso el fichero final estaría en la carpeta /tmp, un lugar fácil para evitar problemas de permisos

Opción 2: Exportar una consulta SQL a CSV desde terminal

Este método es todavía más simple, pero asume que quieres los campos separados por tabulación, cosa que si vas a usar un Excel o similar quizá sea lo más práctico y rápido.

Para ello basta con pasar dos parámetros básicos:

  • -e: Indicando la consulta que quieres hacer entre comillas
  • -B: para indicar que quieres recibir la consulta en modo "batch" (campos separados por tabs)

Supongamos que nos conectamos a mysql, con el contenido de la primera línea...

mysql -u root --password=elquesea mibasededatos \
-e "SELECT * FROM tabla where ...." -B > fichero_salida.csv

... en la segunda tienes la parte que hace la exportación. Ahora tendrás en el fichero_salida.csv el resultado de la consulta delimitado por tabulaciones y si hay cualquier error lo verás por pantalla.