Guía rápida de MySQL

Después de una larga ausencia por problemas con el estudio y el trabajo, vuelvo a las andadas con algo útil. Una de las cosas que tengo que hacer en mi trabajo ahora es trabajar con unas de bases de datos MySQL. Como siempre me dediqué a la programación de idioteces, jamás había visto lo que se podía hacer con una base de datos. Podrán imaginarse cómo se me complicó.

Al momento, lo mejor que encontré para ayudarme con eso fue Navicat: una interfase gráfica para manejar la base de datos, hacer consultas y demás. Tiene versión para Windows, MacOS (binario universal) y Linux; pero su uso sin costo está limitado a 30 días. Buscando en internet, la mejor opción gratuita que encontré fue SqlYog que sólo molesta con una ventanita al abrir y/o cerrar el programa. Pero además tiene una gran desventaja: no tiene el constructor de consultas. Lo que significa que para sacar datos de la base de datos necesitás tener idea de MySQL. Se aceptan sugerencias sobre otras interfases de este estilo.

Evidentemente, algo aprendí leyendo lo que hacía el Navicat cuando yo construía consultas. La documentación oficial de MySQL también fue de gran ayuda (especialmente el capítulo 13); pero de todas formas es complicada de leer. Por eso, acá les traduzco una referencia muy completa que me fue de gran ayuda para aprender y recordar la sintáxis de MySQL.

Notas de traducción

  • La traducción fue realizada con la autorización explícita y por escrito (en un e-mail) de su autor: Neal Parikh
  • En los ejemplos dados, mysql&gt: representa la línea de comandos del cliente por defecto de MySQL, pero ésta debería ser válida para cualquier cliente, programa o interfase capaz de interactuar con una base de datos MySQL
  • No he verificado del todo; pero estoy casi seguro que las palabras en mayúsculas son todas palabras reservadas y no deben ser tipeadas literalmente (en mayúsculas o minúsculas)
  • El artículo original: MySQL Cheat Sheet

La traducción

Seleccionar una base de datos:

mysql> USE basededatos;

Mostrar las bases de datos existentes:

mysql> SHOW DATABASES;

Mostrar las tablas de la base de datos seleccionada:

mysql> SHOW TABLES;

Describir el formato de una tabla:

mysql> DESCRIBE tabla;

Crear una base de datos:

mysql> CREATE DATABASE nombre_basededatos;

Crear una tabla:

mysql> CREATE TABLE nombre_tabla (nombre_campo1 TIPO(TAMAÑO), nombre_campo2 TIPO(TAMAÑO), ...);

Por ejemplo:

mysql> CREATE TABLE mascota (nombre VARCHAR(20), sexo CHAR(1), nacimiento DATE);

Cargar un archivo separado por tabs a la base de datos:

mysql> LOAD DATA LOCAL INFILE "archivo.txt" INTO TABLE nombre_tabla;

(Usar \n para representar un valor NULL)

Agregar una fila por vez

mysql> INSERT INTO nombre_tabla VALUES ('Nombre', 'Dueño', '2006-05-23');

(Usar NULL para los valores NULL)

Obtener ifnormación:

mysql> SELECT columna1, columna2, ..., columna_n FROM tablas WHERE condiciones;

Toda la tabla: SELECT * FROM tabla;
Algunos valores: SELECT * FROM tabla WHERE nombre_columna = "valor";
Varios filtros: SELECT * FROM tabla WHERE columna1 = "valor1" AND columna2 = "valor2";

Modificar un conjunto de registros (que concuerden con un filtro)

mysql> UPDATE tabla SET nombre_columna = "nuevo_valor" WHERE nombre_columna = "valor_de_filtro";

Seleccionando sólo una columna en especial:

mysql> SELECT nombre_columna FROM tabla;

Obteniendo datos únicos/distintos/sin repetir:

mysql> SELECT DISTINCT nombre_columna FROM tabla;

Ordenar los datos

mysql> SELECT columna1, columna2, .... FROM tabla ORDER BY columna_n;

Orden inverso: SELECT columna1, columna2, .... FROM tabla ORDER BY columna_n DESC;

Cálculo de fechas

mysql> SELECT CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(columna_de_fecha)) AS diferencia_de_fechas [FROM tabla];

MONTH(una_fecha) extrae el mes de la fecha especificada, DAYOFMONTH(fecha) el día.

Búsqueda de patrones (expresiones):

mysql> SELECT * FROM tabla WHERE columna LIKE 'algo%';

% es el caracter de comodín que significa cualquier cantidad de caracteres

mysql> SELECT * FROM tabla WHERE columna LIKE '_____';

_ es el caracter de comodín que significa cualquier caracter (sólo 1).

Búsqueda avanzada de expresiones regulares:

mysql> SELECT * FROM tabla WHERE columna RLIKE '^b$';

  • . para un caracter
  • [...] para un conjunto de caracteres
  • * para 0 o más caracteres
  • ^ para el comienzo
  • {n} para n repeticiones
  • $ para el final

Es válido tanto para RLIKE como REGEXP. Sin embargo, para forzar la diferenciación de mayúsculas de minúsculas se recomendaría usar “REGEXP BINARY”.

Contando filas:

mysql> SELECT COUNT(*) FROM tabla;

Agrupar las cuentas

mysql> SELECT columna, COUNT(*) FROM tabla GROUP BY columna;

GROUP BY agrupa todos los registros de cada valor distinto de la columna especificada

Filtrando varias columnas:

mysql> SELECT tabla1.columna1, columna2 FROM tabla1, tabla2 WHERE tabla1.columna1 = tabla2.columna_n;

Se puede comparar una tabla consigo misma utilizando ‘AS’ para darle un nuevo nombre a una columna.

Seleccionar la base de datos actual:

mysql> SELECT DATABASE();

Calcular el máximo

mysql> SELECT MAX(nombre_columna) AS nombre_nueva_columnal FROM tabla;

Columna auto-incrementada

mysql> CREATE TABLE tabla (numero INT NOT NULL AUTO_INCREMENT, nombre CHAR(10) NOT NULL);
mysql> INSERT INTO tabla (nombre) VALUES ("tomas"),("pedro"),("juan");

Agregando una columna a una tabla ya existente:

mysql> ALTER TABLE tabla ADD COLUMN [sintaxis para una nueva columna] AFTER nombre_columna;

Borrando una columna:

mysql> ALTER TABLE tabla DROP COLUMN nombre_columna;

Haciendo una copia de seguridad con mysqldump:

# mysqldump --opt -u usario -p base_de_datos > respaldo.sql

Si se quiere hacer el respaldo de muchas bases de datos, hay que utilizar:

# mysqldump --opt --all-databases > respaldo_todo.sql

6 thoughts on “Guía rápida de MySQL

  1. Muy buen articulo Matias!! Excelente para iniciados.
    Si no tenes las suerte de tener un server linux para hacer las pruebas te recomiendo instales EasyPHP. Una muy buena aplicación que tiene TODO lo necesario (Apache, Mysql, PhpMyAdmin,..).
    Para el modelado de base de datos te recomiendo fabFORCE. Es genial. Tiene un par de tutoriales y ejemplos que te pueden ayudar. Espero sea útil. ;)

  2. El mejor sistema para administración de bases de datos MySQL que encontré es PhpMyAdmin. Es muy completo y se vale de una interfaz gráfica bastante intuitiva. Sin duda, una de las opciones preferidas sobre todo por desarrolladores web.

    Como el funcionamiento de PhpMyAdmin se basa en un conjunto de páginas codificadas en PHP, para utilizarlo de forma local será necesario instalar un servidor web. AppServ es una alternativa al propuesto por el compañero Nicolás; como el de su ejemplo, el paquete instala y configura de manera básica lo necesario para lograr arrancar el servidor sin mayores inconvenientes. También incluye PhpMyAdmin.

    http://sourceforge.net/projects/appserv/

    Antes de terminar, quisiera también recomendar el siguiente artículo:

    http://www.programacion.com/bbdd/articulo/bbdd_disenyo/

    El escrito nos orientará un poco en la construcción de bases de datos con estructuras eficientes.

    Saludos.

  3. [mode OFF TOPIC on]

    Por cierto, feliz cumpleaños al autor de este interesante blog :).
    Hay que actualizar el perfil ;)

    Si lo considera apropiado, sr. Matías, elimine este mensaje sin remordimientos :P

    [mode OFF TOPIC off]

  4. Gracias por las felicitaciones de cumpleaños a todos.

    En cuanto a herramientas para trabajar directamente con las bases de datos ya hablaré más adelante. Especialmente el tema de instalar un servidor básico en windows (en linux es una pavada).

Comments are closed.