Friday, May 6, 2011

Guía Rápida de MySQL

Artículo Original: MySQL Cheat Sheet

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 informació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