Guía definitiva de comandos MySQL: de principiante a profesional

目次

1. Introducción

MySQL es una base de datos relacional de código abierto ampliamente utilizada entre los sistemas de gestión de bases de datos (DBMS). Se emplea especialmente en aplicaciones web y sistemas empresariales. Este artículo ofrece una explicación detallada de los comandos básicos de MySQL, estructurada para permitir un aprendizaje fluido desde principiantes hasta usuarios intermedios.

1.1 ¿Qué es MySQL?

MySQL es un software para gestionar bases de datos relacionales (RDB). Los datos se almacenan en formato de tabla y se manipulan mediante SQL (Structured Query Language). MySQL tiene las siguientes características.

  • Código abierto y puede ser utilizado de forma gratuita por cualquier persona
  • Caracterizado por una operación rápida y ligera
  • Compatible con muchos lenguajes de programación (PHP, Python, Java, etc.)
  • Soporta la operación de bases de datos a gran escala

1.2 Beneficios de aprender los comandos de MySQL

Para usar MySQL de manera eficiente, es importante comprender los comandos básicos. Los beneficios son los siguientes.

  • Gestión eficiente de datos: Al dominar los comandos SQL, la recuperación, actualización y eliminación de datos se pueden realizar rápidamente
  • Automatización empresarial: Al utilizar scripts, las operaciones de la base de datos pueden automatizarse
  • Manejo fluido de errores: Cuando surgen problemas, se pueden resolver con los comandos SQL adecuados

1.3 Lo que puedes aprender en este artículo

Este artículo ofrece explicaciones detalladas sobre los siguientes temas.

  • Operaciones básicas de MySQL (inicio, conexión, operaciones de base de datos)
  • Adición, recuperación, actualización y eliminación de datos (operaciones CRUD)
  • Gestión de usuarios y configuración de permisos
  • Comandos útiles y solución de problemas

A partir de aquí, procederemos con explicaciones detalladas de cada sección en orden. Empecemos con las operaciones básicas de MySQL.

2. Operaciones básicas de MySQL (Para principiantes)

2.1 Inicio y conexión de MySQL

2.1.1 Iniciando MySQL

MySQL funciona como un programa servidor, por lo que primero debe iniciar el servidor. El método de inicio varía según el sistema operativo.

Iniciando en Linux / macOS

En Linux o macOS, puede iniciar MySQL usando el comando systemctl.

sudo systemctl start mysql

Verificación del estado de inicio de MySQL

sudo systemctl status mysql

Si muestra «active (running)», entonces MySQL está funcionando normalmente.

Iniciando en Windows

En Windows, MySQL suele ejecutarse como un servicio, por lo que use el comando net start.

net start mysql

Alternativamente, si usa XAMPP, inicie «MySQL» desde el panel de control de XAMPP.

2.1.2 Conexión a MySQL

Para conectarse a MySQL, use el comando mysql. El comando básico de conexión es el siguiente.

mysql -u username -p
Conexión como usuario root

Por defecto, el usuario root está configurado como administrador. Puede conectarse con el siguiente comando.

mysql -u root -p

Presione Enter para que se le solicite la contraseña. Ingrese la contraseña correcta para iniciar sesión en MySQL.

Conexión a un host específico

Para conectarse a un servidor MySQL remoto, use la opción -h.

mysql -h hostname -u username -p

Por ejemplo, para conectarse al servidor MySQL en 192.168.1.100, use lo siguiente.

mysql -h 192.168.1.100 -u root -p
Conexión especificando el número de puerto

El número de puerto predeterminado para MySQL es 3306, pero si se ha cambiado, puede especificarlo con la opción -P.

mysql -h 192.168.1.100 -P 3307 -u root -p

2.2 Comandos básicos de MySQL

Una vez conectado a MySQL, intentemos ejecutar comandos básicos de operación.

2.2.1 Verificación de la versión de MySQL

Para verificar la versión de MySQL que está utilizando actualmente, ejecute el siguiente comando.

SELECT VERSION();

2.2.2 Verificación de la base de datos actual

Para verificar la base de datos actualmente seleccionada, ejecute el siguiente comando.

SELECT DATABASE();

Si no se selecciona nada, se devuelve NULL.

2.2.3 Mostrar una lista de bases de datos disponibles

Para listar las bases de datos existentes en MySQL, use el siguiente comando.

SHOW DATABASES;

2.3 Errores comunes y soluciones

2.3.1 Error de «Access denied»

Error example:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Solución:
  1. Verificar si la contraseña es correcta
  2. Verificar los permisos de root y restablecerlos
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;

2.3.2 Error: «No se puede conectar al servidor MySQL en ‘localhost’»

Error example:

ERROR 2002 (HY000): Can't connect to MySQL server on 'localhost' (10061)
Solución:
  1. Verificar si MySQL está en ejecución (systemctl status mysql)
  2. Reiniciar MySQL
sudo systemctl restart mysql

2.4 Resumen

En esta sección, explicamos cómo iniciar y conectar a MySQL.

3. Operaciones con bases de datos

En MySQL, creas una base de datos (Database) para gestionar datos y organizas la información colocando tablas (Table) dentro de ella. Esta sección ofrece una explicación detallada de las operaciones básicas como crear, seleccionar, listar y eliminar bases de datos.

3.1 Creación de una base de datos

Para crear una base de datos en MySQL, utiliza el comando CREATE DATABASE.

3.1.1 Creación básica de una base de datos

Ejecutar el siguiente comando SQL crea una nueva base de datos my_database.

CREATE DATABASE my_database;
Mensaje de creación exitosa
Query OK, 1 row affected (0.01 sec)

3.1.2 Intento de crear una base de datos que ya existe

Si la base de datos ya existe, se muestra un error como el siguiente.

ERROR 1007 (HY000): Can't create database 'my_database'; database exists

Para evitar este error, es conveniente usar la opción IF NOT EXISTS.

CREATE DATABASE IF NOT EXISTS my_database;

Ejecutar este comando crea la base de datos solo si no existe.

3.2 Listado de bases de datos

Para comprobar las bases de datos en el servidor MySQL actual, utiliza el comando SHOW DATABASES.

SHOW DATABASES;

Salida de ejemplo:

+--------------------+
| Database          |
+--------------------+
| information_schema |
| my_database       |
| mysql             |
| performance_schema |
| sys               |
+--------------------+
  • Las bases de datos del sistema como mysql e information_schema son necesarias para la gestión de MySQL.

3.3 Selección de una base de datos

En MySQL, necesitas seleccionar la base de datos creada para usarla. Para especificar la base de datos, ejecuta el comando USE.

USE my_database;
Mensaje de éxito
Database changed

Para comprobar la base de datos actualmente seleccionada, utiliza el siguiente comando.

SELECT DATABASE();

Salida de ejemplo:

+------------+
| DATABASE() |
+------------+
| my_database |
+------------+

3.4 Eliminación de una base de datos

Para eliminar una base de datos innecesaria, utiliza el comando DROP DATABASE.

DROP DATABASE my_database;

3.4.1 Precauciones antes de la eliminación

  • ¡Cuidado! La eliminación borrará todos los datos.
  • Para evitar la eliminación accidental, también puedes añadir IF EXISTS.
DROP DATABASE IF EXISTS my_database;

Este comando finaliza el proceso sin error incluso si my_database no existe.

3.5 Errores comunes y soluciones

3.5.1 Error: «Acceso denegado para el usuario»

Error example:

ERROR 1044 (42000): Access denied for user 'user_name'@'localhost' to database 'my_database'
Solución
  • Otorgar permisos usando el comando GRANT
GRANT ALL PRIVILEGES ON my_database.* TO 'user_name'@'localhost';
FLUSH PRIVILEGES;

3.5.2 Error: «No se puede eliminar la base de datos»

Error example:

ERROR 1010 (HY000): Error dropping database (can't rmdir './my_database', errno: 39)
Solución
  • Reiniciar MySQL
sudo systemctl restart mysql
  • Eliminar todas las tablas en my_database y luego ejecutar DROP DATABASE.

3.6 Resumen

En esta sección, aprendimos sobre la creación, selección, listado y eliminación de bases de datos.

4. Operaciones con tablas

Después de crear la base de datos, necesitas crear tablas (Table) dentro de ella para organizar los datos. Una tabla es como una hoja de cálculo para almacenar datos, compuesta por columnas (campos) y filas (registros).

En esta sección, explicaremos en detalle las operaciones básicas como crear, verificar, listar y eliminar tablas.

4.1 Creación de Tablas

Para crear una tabla, utiliza el comando CREATE TABLE. Ejecutar el siguiente SQL creará una tabla llamada users.

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4.1.1 Explicación de Cada Elemento al Crear una Tabla

  • id INT AUTO_INCREMENT PRIMARY KEY
  • La columna id es de tipo entero (INT), se incrementa automáticamente (AUTO_INCREMENT) y se establece como la clave primaria (PRIMARY KEY).
  • name VARCHAR(50) NOT NULL
  • La columna name es una cadena de hasta 50 caracteres (VARCHAR) y es obligatoria debido a NOT NULL.
  • email VARCHAR(100) UNIQUE NOT NULL
  • La columna email es una cadena de hasta 100 caracteres, y debido a la restricción UNIQUE, no se pueden registrar direcciones de correo duplicadas.
  • created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  • La columna created_at establece automáticamente la fecha y hora actuales como valor por defecto.
Mensaje de Éxito
Query OK, 0 rows affected (0.02 sec)

4.2 Verificación de la Estructura de la Tabla

Para verificar la estructura de la tabla creada, utiliza DESC o SHOW COLUMNS.

DESC users;

o

SHOW COLUMNS FROM users;

Ejemplo de salida:

+------------+--------------+------+-----+-------------------+----------------+
| Field      | Type         | Null | Key | Default           | Extra          |
+------------+--------------+------+-----+-------------------+----------------+
| id         | int(11)      | NO   | PRI | NULL              | auto_increment |
| name       | varchar(50)  | NO   |     | NULL              |                |
| email      | varchar(100) | NO   | UNI | NULL              |                |
| created_at | timestamp    | YES  |     | CURRENT_TIMESTAMP |                |
+------------+--------------+------+-----+-------------------+----------------+

4.3 Listado de Tablas

Para verificar la lista de tablas existentes en la base de datos actual, ejecuta el comando SHOW TABLES.

SHOW TABLES;

Ejemplo de salida:

+------------------+
| Tables_in_mydb   |
+------------------+
| users            |
| products         |
| orders           |
+------------------+

4.4 Eliminación de Tablas

Para eliminar una tabla innecesaria, utiliza el comando DROP TABLE.

DROP TABLE users;

4.4.1 Precauciones al Eliminar Tablas

  • ¡Ten cuidado, ya que la eliminación eliminará completamente los datos!
  • Para evitar eliminaciones accidentales, agregar IF EXISTS puede prevenir errores.
DROP TABLE IF EXISTS users;
Mensaje de Éxito
Query OK, 0 rows affected (0.01 sec)

4.5 Restablecimiento de Datos de la Tabla (Eliminar Todo)

Si deseas eliminar solo los datos dentro de la tabla manteniendo intacta la estructura de la tabla, utiliza TRUNCATE TABLE.

TRUNCATE TABLE users;
Diferencia con DROP TABLE
  • DROP TABLE elimina la tabla en sí.
  • TRUNCATE TABLE elimina solo los datos y conserva la estructura de la tabla.

4.6 Errores Comunes y Soluciones

4.6.1 Error «Tabla ya existe»

Error example:

ERROR 1050 (42S01): Table 'users' already exists
Solución
  • Verificar si existen tablas
SHOW TABLES;
  • Crear con IF NOT EXISTS
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

4.6.2 Error «Tabla desconocida»

Error example:

ERROR 1051 (42S02): Unknown table 'users'
Solución
  • Use SHOW TABLES; para verificar si la tabla objetivo existe
  • Si no existe, añada IF EXISTS
DROP TABLE IF EXISTS users;

4.7 Resumen

En esta sección, explicamos las operaciones básicas para crear, verificar y eliminar tablas en MySQL.

5. Operaciones de Datos (CRUD)

Después de crear la base de datos y las tablas, es importante agregar, recuperar, actualizar y eliminar datos correctamente. En MySQL, las bases de las operaciones de datos son las cuatro operaciones llamadas CRUD (Crear, Leer, Actualizar, Eliminar).

En esta sección, explicaremos en detalle los métodos para agregar datos (INSERT), recuperar datos (SELECT), actualizar datos (UPDATE) y eliminar datos (DELETE).

5.1 Agregar Datos (INSERT)

Para agregar nuevos datos a una tabla, use el comando INSERT INTO.

5.1.1 Agregar Datos Básicos

Por ejemplo, para agregar un nuevo usuario a la tabla users, ejecute el siguiente SQL.

INSERT INTO users (name, email) VALUES ('Tanaka Taro', 'tanaka@example.com');
Si la operación es exitosa, se mostrará el siguiente mensaje.
Query OK, 1 row affected (0.01 sec)

5.1.2 Agregar Múltiples Registros a la Vez

También es posible agregar múltiples registros a la vez.

INSERT INTO users (name, email) VALUES
('Sato Hanako', 'sato@example.com'),
('Suzuki Ichiro', 'suzuki@example.com'),
('Takahashi Mayu', 'takahashi@example.com');

5.2 Recuperar Datos (SELECT)

Para recuperar datos de una tabla, use la sentencia SELECT.

5.2.1 Recuperar Todos los Datos

Para recuperar todos los datos de la tabla users, ejecute el siguiente SQL.

SELECT * FROM users;

Salida de ejemplo:

+----+------------+------------------+---------------------+
| id | name       | email            | created_at          |
+----+------------+------------------+---------------------+
|  1 | Tanaka Taro| tanaka@example.com | 2024-02-01 10:00:00 |
|  2 | Sato Hanako| sato@example.com  | 2024-02-01 10:01:00 |
|  3 | Suzuki Ichiro | suzuki@example.com | 2024-02-01 10:02:00 |
+----+------------+------------------+---------------------+

5.2.2 Recuperar Solo Columnas Específicas

Si desea mostrar solo columnas específicas (campos), especifique los nombres de las columnas.

SELECT name, email FROM users;

5.2.3 Recuperar Datos con Condiciones

Usando la cláusula WHERE, puede recuperar solo los datos que coincidan con condiciones específicas.

SELECT * FROM users WHERE name = 'Sato Hanako';

5.2.4 Ordenar (ORDER BY)

Para ordenar los datos en orden ascendente o descendente, use ORDER BY.Orden Ascendente (Pequeño Primero)

SELECT * FROM users ORDER BY id ASC;

Orden Descendente (Mayor Primero)

SELECT * FROM users ORDER BY id DESC;

5.2.5 Limitar el Número de Registros (LIMIT)

Para recuperar solo los primeros 2 registros:

SELECT * FROM users LIMIT 2;

5.3 Actualizar Datos (UPDATE)

Para actualizar datos en una tabla, use la sentencia UPDATE.

5.3.1 Actualizar Datos Específicos

Por ejemplo, para cambiar la dirección de correo electrónico del usuario con id = 2, ejecute el siguiente SQL.

UPDATE users SET email = 'sato_hanako@example.com' WHERE id = 2;

5.3.2 Actualizar Múltiples Columnas Simultáneamente

UPDATE users SET name = 'Sato Misaki', email = 'misaki@example.com' WHERE id = 2;

5.3.3 Todos los Registros Se Actualizarán Si No Se Especifica una Condición

¡Precaución!Si no especifica la cláusula WHERE, todos los datos se actualizarán.

UPDATE users SET email = 'test@example.com';  -- ⚠️ All users' emails will be changed

5.4 Eliminar Datos (DELETE)

Para eliminar datos innecesarios, use la sentencia DELETE FROM.

5.4.1 Eliminar Datos Específicos

Para eliminar el usuario con id = 3, ejecute el siguiente SQL.

DELETE FROM users WHERE id = 3;

5.4.2 Eliminar Todos los Datos

¡Precaución!Si omite la cláusula WHERE, todos los datos de la tabla se eliminarán.

DELETE FROM users;  -- ⚠️ Deletes all data (dangerous!)

Si desea eliminar todo, se recomienda TRUNCATE TABLE

TRUNCATE TABLE users;

DELETE realiza la eliminación fila por fila, pero TRUNCATE TABLE reinicia la tabla, por lo que es más rápido.

5.5 Resumen

En esta sección aprendimos las operaciones básicas para agregar datos (INSERT), recuperar datos (SELECT), actualizar datos (UPDATE) y eliminar datos (DELETE).

6. Gestión de usuarios y configuración de permisos

En MySQL, para garantizar la seguridad de la base de datos, es importante establecer permisos adecuados para cada usuario. Especialmente en proyectos que involucran a varios desarrolladores o bases de datos en entornos de producción, la gestión de usuarios es esencial.

En esta sección explicaremos en detalle la gestión de usuarios de MySQL y la configuración de permisos.

6.1 Gestión de usuarios de MySQL

La información de los usuarios en MySQL se almacena en la tabla user de la base de datos mysql. Como fundamentos de la gestión de usuarios, aprendamos los métodos para crear, listar y eliminar usuarios.

6.1.1 Creación de usuarios

Para crear un nuevo usuario, use el comando CREATE USER.

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';

El significado de este comando:

  • Crea un usuario llamado new_user
  • localhost (permite solo conexiones locales)
  • Establece password123 como contraseña
Creación de un usuario para acceso remoto

Para acceder a MySQL desde fuera del servidor, especifique '%'.

CREATE USER 'remote_user'@'%' IDENTIFIED BY 'securepassword';

% significa permite el acceso desde todas las direcciones IP.

6.2 Listado de usuarios

Para comprobar la lista de usuarios existentes, consulte la tabla mysql.user.

SELECT user, host FROM mysql.user;

Ejemplo de salida:

+-----------+-----------+
| user      | host      |
+-----------+-----------+
| root      | localhost |
| new_user  | localhost |
| remote_user | %       |
+-----------+-----------+

En esta tabla, puede verificar el user (nombre de usuario) y el host (host con el que se puede conectar) de cada usuario.

6.3 Eliminación de usuarios

Para eliminar usuarios innecesarios, use el comando DROP USER.

DROP USER 'new_user'@'localhost';
Notas después de la eliminación
  • Eliminar un usuario también elimina los permisos de ese usuario.
  • Si se elimina por error, debe crearlo nuevamente con CREATE USER.

6.4 Gestión de permisos

En MySQL, puede establecer permisos para cada usuario para limitar el alcance de las operaciones.

6.4.1 Concesión de permisos (GRANT)

Para conceder permisos específicos a un usuario, use el comando GRANT.

GRANT ALL PRIVILEGES ON my_database.* TO 'new_user'@'localhost';

Este comando concede todos los permisos sobre my_database a new_user.

Concesión solo de permisos específicos
GRANT SELECT, INSERT, UPDATE ON my_database.* TO 'new_user'@'localhost';

Este comando permite a new_user solo recuperación de datos (SELECT), inserción (INSERT) y actualización (UPDATE).

6.5 Verificación de permisos

Para comprobar los permisos de un usuario, use el comando SHOW GRANTS.

SHOW GRANTS FOR 'new_user'@'localhost';

Ejemplo de salida:

+------------------------------------------------------------+
| Grants for new_user@localhost                              |
+------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON my_database.* TO 'new_user'@'localhost' |
+------------------------------------------------------------+

6.6 Revocación de permisos (REVOKE)

Para revocar permisos específicos de un usuario, use el comando REVOKE.

REVOKE INSERT, UPDATE ON my_database.* FROM 'new_user'@'localhost';

Al ejecutar este comando, new_user pierde los permisos de INSERT (agregar) y UPDATE (actualizar).

6.7 Cambio de contraseñas

6.7.1 Cambio de la contraseña de un usuario

Para cambiar la contraseña de un usuario de MySQL, use ALTER USER.

ALTER USER 'new_user'@'localhost' IDENTIFIED BY 'newpassword123';

6.7.2 Cambio de la contraseña del usuario root

Para cambiar la contraseña del administrador (root), ejecute el siguiente comando.

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'strongpassword';

Después de cambiar la contraseña, ejecute FLUSH PRIVILEGES para aplicar los permisos.

FLUSH PRIVILEGES;

6.8 Errores comunes y soluciones

6.8.1 Error «Acceso denegado»

Ejemplo de error:

ERROR 1045 (28000): Access denied for user 'new_user'@'localhost' (using password: YES)
Solución
  • Verificar los permisos con SHOW GRANTS
SHOW GRANTS FOR 'new_user'@'localhost';
  • Reasignar los permisos
GRANT ALL PRIVILEGES ON my_database.* TO 'new_user'@'localhost';
FLUSH PRIVILEGES;

6.8.2 Error «El usuario ya existe»

Ejemplo de error:

ERROR 1396 (HY000): Operation CREATE USER failed for 'new_user'@'localhost'
Solución
  • Si ya existe, elimínelo y recreelo
DROP USER 'new_user'@'localhost';
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';

6.9 Resumen

En esta sección, explicamos en detalle la gestión de usuarios y la configuración de permisos de MySQL.
Puntos especialmente importantes:

  • Crear usuarios con CREATE USER
  • Conceder permisos con GRANT
  • Verificar permisos con SHOW GRANTS
  • Cambiar contraseñas con ALTER USER

7. Comandos útiles de MySQL (para usuarios intermedios)

MySQL ofrece muchos comandos útiles además de las operaciones básicas de datos (CRUD) para apoyar la gestión y optimización de bases de datos. En esta sección, presentamos comandos de MySQL para usuarios intermedios, como respaldo y restauración de bases de datos, optimización del rendimiento y verificación de información del sistema.

7.1 Respaldo de bases de datos

Para prevenir la pérdida de datos, MySQL permite respaldo (exportación) y restauración (importación).

7.1.1 Respaldo con mysqldump

Con el comando mysqldump, puedes respaldar una base de datos específica.

mysqldump -u root -p my_database > my_database_backup.sql
Descripción de opciones
  • -u root → Ejecutar como usuario root
  • -p → Ingresar contraseña
  • my_database → Nombre de la base de datos a respaldar
  • > → Archivo de salida (por ejemplo, my_database_backup.sql)

7.1.2 Respaldar todas las bases de datos

Para respaldar todas las bases de datos a la vez, usa la opción --all-databases.

mysqldump -u root -p --all-databases > all_databases_backup.sql

7.2 Restauración de bases de datos

Para restaurar datos respaldados en MySQL, usa el comando mysql.

7.2.1 Restaurar una sola base de datos

mysql -u root -p my_database < my_database_backup.sql

7.2.2 Restaurar todas las bases de datos

mysql -u root -p < all_databases_backup.sql

7.3 Verificar procesos en ejecución

Para comprobar el estado de carga del servidor MySQL o qué consultas están en ejecución, usa SHOW PROCESSLIST.

SHOW PROCESSLIST;

Ejemplo de salida:

+----+------+-----------+----+---------+------+----------+------------------+
| Id | User | Host      | db | Command | Time | State    | Info             |
+----+------+-----------+----+---------+------+----------+------------------+
|  1 | root | localhost | my_database | Query  |    10 | Sending data | SELECT * FROM users |
+----+------+-----------+----+---------+------+----------+------------------+

7.3.1 Mostrar todos los procesos en ejecución en detalle

SHOW FULL PROCESSLIST;

7.4 Optimización de consultas

7.4.1 Verificar el plan de ejecución (EXPLAIN)

Con el comando EXPLAIN, puedes verificar el plan de ejecución de la consulta e identificar problemas de rendimiento.

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

Ejemplo de salida:

+----+-------------+-------+------+---------------+------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key  | key_len | ref   | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------+
|  1 | SIMPLE      | users | ref  | email_index   | email| 62      | const |    1 |       |
+----+-------------+-------+------+---------------+------+---------+-------+------+-------+
  • possible_keys : Índices disponibles
  • key : Índice realmente usado
  • rows : Número de filas buscadas (cuanto menor, más rápido)

7.5 Verificar índices

A medida que aumenta el volumen de datos, las búsquedas pueden ralentizarse. Por lo tanto, es importante configurar los índices adecuadamente.

7.5.1 Verificación de índices actuales

Para obtener una lista de índices de tabla, use SHOW INDEX.

SHOW INDEX FROM users;

Ejemplo de salida:

+-------+------------+----------+--------------+-----------------+-----------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name     | Index_type|
+-------+------------+----------+--------------+-----------------+-----------+
| users |          0 | PRIMARY  |            1 | id              | BTREE     |
| users |          1 | email    |            1 | email           | BTREE     |
+-------+------------+----------+--------------+-----------------+-----------+

7.6 Verificación del estado de la base de datos

7.6.1 Verificación de la versión de MySQL

Para comprobar la versión actual de MySQL, ejecute el siguiente comando.

SELECT VERSION();

Ejemplo de salida:

+-----------+
| VERSION() |
+-----------+
| 8.0.32    |
+-----------+

7.6.2 Verificación del tamaño de la base de datos

Para comprobar el tamaño de cada base de datos, ejecute la siguiente consulta.

SELECT table_schema AS "Database", 
       ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)"
FROM information_schema.tables
GROUP BY table_schema;

Ejemplo de salida:

+---------------+-----------+
| Database      | Size (MB) |
+---------------+-----------+
| my_database   |     45.23 |
| mysql         |      2.10 |
+---------------+-----------+

7.7 Resumen

En esta sección, presentamos comandos útiles de MySQL para usuarios intermedios.
Los más importantes son:

  • Copia de seguridad y restauración de la base de datos (mysqldump, mysql)
  • Verificación de procesos en ejecución (SHOW PROCESSLIST)
  • Optimización de consultas (EXPLAIN)
  • Gestión de índices (SHOW INDEX)
  • Verificación del estado de la base de datos (consultas al esquema de información)

8. Solución de problemas de MySQL

Al usar MySQL, puede encontrarse con diversos problemas como errores de conexión o problemas de rendimiento. En esta sección, presentamos errores comunes de MySQL y sus soluciones.

8.1 Si no puede conectarse a MySQL

8.1.1 Error «Acceso denegado para el usuario»

Ejemplo de error:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
Causas
  • Contraseña incorrecta
  • El usuario no tiene los permisos adecuados
  • Problema con el método de autenticación de MySQL
Soluciones
  1. Verificar si la contraseña es correcta
mysql -u root -p
  1. Verificar los permisos del usuario actual
SELECT user, host FROM mysql.user;
  1. Restablecer la contraseña
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
FLUSH PRIVILEGES;

8.1.2 Error «No se puede conectar al servidor MySQL en ‘localhost’»

Ejemplo de error:

ERROR 2002 (HY000): Can't connect to MySQL server on 'localhost' (10061)
Causas
  • El servidor MySQL está detenido
  • El puerto ha sido cambiado
  • Influencia del firewall
Soluciones
  1. Verificar si MySQL está en ejecución
sudo systemctl status mysql
  1. Reiniciar MySQL
sudo systemctl restart mysql
  1. Especificar el puerto de conexión
mysql -u root -p --port=3306
  1. Verificar el firewall
sudo ufw allow 3306/tcp

8.2 Problemas de base de datos o tabla

8.2.1 Error «Base de datos desconocida»

Ejemplo de error:

ERROR 1049 (42000): Unknown database 'my_database'
Causas
  • La base de datos no existe
  • Error tipográfico en el nombre de la base de datos
Soluciones
  1. Verificar la lista de bases de datos
SHOW DATABASES;
  1. Crear la base de datos
CREATE DATABASE my_database;

8.2.2 Error «La tabla no existe»

Ejemplo de error:

ERROR 1146 (42S02): Table 'my_database.users' doesn't exist
Causas
  • La tabla no existe
  • Error tipográfico en el nombre de la tabla
Soluciones
  1. Verificar la lista de tablas
SHOW TABLES;
  1. Crear la tabla
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);

8.2.3 Error «La tabla está marcada como dañada»

Error example:

Table 'users' is marked as crashed and should be repaired
Causas
  • El servidor se bloqueó anormalmente
  • Los datos están corruptos
Soluciones
  1. Reparar la tabla
REPAIR TABLE users;
  1. Verificar toda la base de datos
CHECK TABLE users;

8.3 Problemas de rendimiento

8.3.1 Error de «Demasiadas conexiones»

Error example:

ERROR 1040 (HY000): Too many connections
Causas
  • Se excedió el número máximo de conexiones
Soluciones
  1. Verificar el número actual de conexiones
SHOW STATUS LIKE 'Threads_connected';
  1. Aumentar el número máximo de conexiones
SET GLOBAL max_connections = 200;

8.3.2 Consultas lentas

Causas
  • No se han establecido índices
  • Consultas ineficientes
Soluciones
  1. Verificar el plan de ejecución
EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';
  1. Crear un índice
CREATE INDEX email_index ON users(email);

8.4 Resumen

En esta sección, presentamos los problemas comunes que ocurren en MySQL y sus soluciones.

  • Errores de conexión → Verificar la contraseña y los permisos de usuario
  • Problemas de base de datos y tabla → Verificar con SHOW DATABASES / SHOW TABLES
  • Problemas de rendimiento → Utilizar EXPLAIN e INDEX

9. [With Tables] Lista de comandos MySQL (Versión de referencia)

En esta sección, resumimos los comandos clave de MySQL introducidos hasta ahora en un formato de tabla. Organizados por categoría, puedes localizar rápidamente los comandos que necesitas.

9.1 Comandos de operación básica

Command

Descripción

SELECT VERSION();

Check MySQL version

SHOW DATABASES;

Mostrar lista de bases de datos

SHOW TABLES;

Mostrar tablas en la base de datos actual

SELECT DATABASE();

Ver la base de datos actualmente utilizada

USE my_database;

Seleccionar la base de datos especificada

DESC users;

Mostrar estructura de tabla

9.2 Operaciones de base de datos

Command

Descripción

CREATE DATABASE my_database;

Crear una nueva base de datos

DROP DATABASE my_database;

Eliminar la base de datos

SHOW CREATE DATABASE my_database;

Mostrar el SQL de creación de la base de datos

9.3 Operaciones de tabla

Command

Descripción

CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50));

Crear una tabla

DROP TABLE users;

Eliminar la tabla

ALTER TABLE users ADD COLUMN email VARCHAR(100);

Agregar una nueva columna

ALTER TABLE users DROP COLUMN email;

Eliminar la columna especificada

SHOW CREATE TABLE users;

Mostrar el SQL de creación de la tabla

9.4 Operaciones de datos (CRUD)

Command

Descripción

INSERT INTO users (name) VALUES ('Tanaka');

Add data

SELECT * FROM users;

Recuperar todos los datos

SELECT name FROM users WHERE id = 1;

Recuperar datos con condiciones

UPDATE users SET name = 'Sato' WHERE id = 1;

Actualizar datos

DELETE FROM users WHERE id = 1;

Delete data

TRUNCATE TABLE users;

Eliminar todos los datos en la tabla

9.5 Gestión de usuarios y permisos

Command

Descripción

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';

Crear un usuario

DROP USER 'new_user'@'localhost';

Eliminar un usuario

GRANT ALL PRIVILEGES ON my_database.* TO 'new_user'@'localhost';

Grant permissions to a user

REVOKE INSERT ON my_database.* FROM 'new_user'@'localhost';

Revocar permisos especificados

SHOW GRANTS FOR 'new_user'@'localhost';

Verificar permisos de usuario

9.6 Copia de seguridad y restauración

Command

Descripción

mysqldump -u root -p my_database > backup.sql

Respaldar la base de datos

mysql -u root -p my_database < backup.sql

Restaurar desde copia de seguridad

9.7 Rendimiento y optimización

Command

Descripción

SHOW PROCESSLIST;

Mostrar consultas en ejecución

SHOW STATUS LIKE 'Threads_connected';

Verificar el número de conexiones actuales

SHOW INDEX FROM users;

Mostrar lista de índices

CREATE INDEX idx_name ON users(name);

Crear un índice

ANALYZE TABLE users;

Actualizar estadísticas de la tabla

OPTIMIZE TABLE users;

Optimizar la tabla

9.8 Solución de problemas

Command

Descripción

SET GLOBAL max_connections = 200;

Cambiar conexiones máximas

REPAIR TABLE users;

Reparar una tabla caída

FLUSH PRIVILEGES;

Aplicar cambios de permiso

9.9 Resumen

En esta sección, hemos compilado los comandos importantes de MySQL en un formato de tabla. En particular, hemos organizado los comandos comúnmente usados en la práctica—como operaciones de datos (CRUD), copias de seguridad, gestión de rendimiento y solución de problemas—para que puedas consultarlos inmediatamente.