Apuntes mysql

“SET PASSWORD has no significance for user 'root'@'localhost'”

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 servidor
  • mysql: Configuración de MySQL
  • performance_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

  1. Siempre pide documentación antes de explorar
  2. Usa cuentas de solo lectura para exploración
  3. Pregunta sobre convenciones de naming de la empresa
  4. 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 y SHOW 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
TOP