1. ¿Por qué explorar antes de consultar?
Imagina que llegas a una biblioteca gigantesca y te piden que busques un libro específico sin conocer cómo está organizada. Sería prácticamente imposible
Lo mismo pasa con las bases de datos. Antes de escribir consultas SQL, necesitas entender:
- ¿Qué bases de datos existen en el servidor?
- ¿Qué tablas tiene cada base de datos?
- ¿Qué columnas tiene cada tabla?
- ¿Cómo se relacionan las tablas entre sí?
2. Comandos de exploración desde MySQL CLI
Ver todas las bases de datos
SHOW DATABASES;
Muestra una lista de todas las bases de datos a las que tienes acceso.
Ejemplo de salida:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sakila |
| world |
+--------------------+
Bases de datos del sistema (no tocar):
information_schema
: Metadatos del servidormysql
: Configuración de MySQLperformance_schema
: Estadísticas de rendimiento
Seleccionar una base de datos
USE sakila;
Te "posiciona" dentro de esa base de datos.
Confirmar dónde estás:
SELECT DATABASE();
Ver todas las tablas
SHOW TABLES;
Ejemplo de salida en Sakila:
+----------------------------+
| Tables_in_sakila |
+----------------------------+
| actor |
| address |
| category |
| city |
| country |
| customer |
| film |
| film_actor |
| film_category |
| film_text |
| inventory |
| language |
| payment |
| rental |
| staff |
| store |
+----------------------------+
3. Examinar la estructura de las tablas
DESCRIBE - El comando más útil
DESCRIBE actor;
O su forma abreviada: DESC actor;
Muestra la estructura completa de la tabla:
+-------------+----------------------+------+-----+-------------------+
| Field | Type | Null | Key | Default |
+-------------+----------------------+------+-----+-------------------+
| actor_id | smallint(5) unsigned | NO | PRI | NULL |
| first_name | varchar(45) | NO | | NULL |
| last_name | varchar(45) | NO | MUL | NULL |
| last_update | timestamp | NO | | CURRENT_TIMESTAMP |
+-------------+----------------------+------+-----+-------------------+
Interpretando la información:
- Field: Nombre de la columna
- Type: Tipo de dato (int, varchar, timestamp, etc.)
- Null: ¿Puede estar vacía? (YES/NO)
- Key: Tipo de índice (PRI=Primary Key, MUL=Multiple, UNI=Unique)
- Default: Valor por defecto
SHOW CREATE TABLE - Estructura completa
SHOW CREATE TABLE actor;
¿Qué muestra? El comando SQL completo que se usó para crear la tabla, incluyendo índices, claves foráneas y restricciones.
SHOW COLUMNS - Alternativa a DESCRIBE
SHOW COLUMNS FROM actor;
Muestra la misma información que DESCRIBE
pero con un formato ligeramente diferente.
4. Descubrir relaciones entre tablas
Ver claves foráneas
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE TABLE_SCHEMA = 'sakila'
AND REFERENCED_TABLE_NAME IS NOT NULL;
¿Para qué sirve? Te muestra cómo las tablas se conectan entre sí.
Ejemplo de salida:
+------------+-------------+------------------+-----------------------+------------------------+
| TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME |
+------------+-------------+------------------+-----------------------+------------------------+
| film_actor | actor_id | fk_film_actor_01 | actor | actor_id |
| film_actor | film_id | fk_film_actor_02 | film | film_id |
+------------+-------------+------------------+-----------------------+------------------------+
Ver índices de una tabla
SHOW INDEX FROM actor;
5. La herramienta mysqlshow
¿Qué es mysqlshow?
mysqlshow
es una herramienta de línea de comandos (fuera de MySQL CLI) que proporciona una interfaz rápida para explorar bases de datos.
Ventaja principal: Puedes explorar sin conectarte al CLI de MySQL.
Uso básico
# Ver todas las bases de datos
mysqlshow -u usuario -p
# Ver tablas de una base de datos específica
mysqlshow -u usuario -p sakila
# Ver columnas de una tabla específica
mysqlshow -u usuario -p sakila actor
# Ver información detallada (con tipos de datos)
mysqlshow -u usuario -p --verbose sakila actor
Cuándo usar mysqlshow vs comandos SQL
Usa mysqlshow cuando:
- Quieras exploración rápida sin conectarte a MySQL
- Necesites información básica de estructura
- Trabajes desde scripts de shell
Usa comandos SQL (SHOW, DESCRIBE) cuando:
- Ya estés conectado al CLI de MySQL
- Necesites información más detallada
- Quieras integrar la exploración con consultas
6. Estrategia práctica para explorar Sakila
Paso 1: Visión general
USE sakila;
SHOW TABLES;
Paso 2: Identificar tablas principales
DESC customer; -- Información de clientes
DESC film; -- Información de películas
DESC actor; -- Información de actores
DESC rental; -- Información de alquileres
Paso 3: Identificar tablas de relación
DESC film_actor; -- Conecta películas con actores
DESC film_category; -- Conecta películas con categorías
Paso 4: Entender los datos
-- Ver algunos registros de ejemplo
SELECT * FROM actor LIMIT 5;
SELECT * FROM film LIMIT 5;
SELECT * FROM film_actor LIMIT 5;
Paso 5: Identificar patrones
-- Contar registros en cada tabla
SELECT 'actors' AS tabla, COUNT(*) AS registros FROM actor
UNION ALL
SELECT 'films' AS tabla, COUNT(*) AS registros FROM film
UNION ALL
SELECT 'customers' AS tabla, COUNT(*) AS registros FROM customer;
7. Consejos para explorar bases de datos reales
En el trabajo
- Siempre pide documentación antes de explorar
- Usa cuentas de solo lectura para exploración
- Pregunta sobre convenciones de naming de la empresa
- Identifica tablas de configuración vs. datos de negocio
Buenas prácticas
- Empieza por las tablas principales (usuarios, productos, pedidos)
- Busca patrones en los nombres (_id para claves, _date para fechas)
- Presta atención a los prefijos (tbl_, usr_, prd_)
- Documenta lo que descubras para futura referencia
Resumen
En este tema hemos aprendido:
- A explorar bases de datos con
SHOW DATABASES
,SHOW TABLES
- A examinar estructura de tablas con
DESCRIBE
ySHOW CREATE TABLE
- A identificar relaciones entre tablas
- A usar la herramienta
mysqlshow
para exploración rápida - Estrategias prácticas para entender bases de datos desconocidas