🔌 Conexión
mysql -u usuario -p # Conectar pidiendo contraseña
mysql -u usuario -p -h host # Conectar a host remoto
mysql -u usuario -p -P 3307 # Conectar a puerto específico
mysql -u usuario -p nombre_bd # Conectar y seleccionar BD
exit # Salir de la consola (o \q)
🗄️ Bases de datos
SHOW DATABASES; # Listar bases de datos
CREATE DATABASE mi_bd; # Crear base de datos
CREATE DATABASE IF NOT EXISTS mi_bd; # Crear si no existe
USE mi_bd; # Seleccionar base de datos
DROP DATABASE mi_bd; # Eliminar base de datos ⚠️
SELECT DATABASE(); # Ver BD actual
📋 Tablas
SHOW TABLES; # Listar tablas
DESCRIBE mi_tabla; # Ver estructura de tabla
DESC mi_tabla; # Igual que DESCRIBE (abreviado)
SHOW CREATE TABLE mi_tabla; # Ver sentencia CREATE completa
DROP TABLE mi_tabla; # Eliminar tabla ⚠️
DROP TABLE IF EXISTS mi_tabla; # Eliminar si existe
RENAME TABLE vieja TO nueva; # Renombrar tabla
TRUNCATE TABLE mi_tabla; # Vaciar tabla (sin borrar estructura)
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
edad INT DEFAULT 18,
creado_en TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
🛠️ Modificar estructura (ALTER)
ALTER TABLE usuarios ADD telefono VARCHAR(20); # Añadir columna ALTER TABLE usuarios DROP COLUMN telefono; # Eliminar columna ALTER TABLE usuarios MODIFY nombre VARCHAR(150); # Modificar tipo de columna ALTER TABLE usuarios CHANGE nombre nombre_completo VARCHAR(150); # Renombrar columna ALTER TABLE usuarios ADD PRIMARY KEY (id); # Añadir clave primaria
ALTER TABLE usuarios AUTO_INCREMENT = 1; ALTER TABLE usuarios ADD INDEX idx_email (email); # Añadir índice
➕ Insertar datos
INSERT INTO usuarios (nombre, email) VALUES ('Ana', 'ana@mail.com'); # Insertar una fila
INSERT INTO usuarios (nombre, email) VALUES # Insertar varias filas
('Luis', 'luis@mail.com'),
('Marta', 'marta@mail.com');
🔎 Consultar datos (SELECT)
SELECT * FROM usuarios; # Todas las columnas y filas
SELECT nombre, email FROM usuarios; # Columnas específicas
SELECT * FROM usuarios WHERE edad > 18; # Filtrar con WHERE
SELECT * FROM usuarios ORDER BY nombre ASC; # Ordenar ascendente
SELECT * FROM usuarios ORDER BY edad DESC; # Ordenar descendente
SELECT * FROM usuarios LIMIT 10; # Limitar resultados
SELECT * FROM usuarios LIMIT 10 OFFSET 20; # Paginación
SELECT DISTINCT edad FROM usuarios; # Valores únicos
SELECT COUNT(*) FROM usuarios; # Contar filas
SELECT * FROM usuarios WHERE nombre LIKE 'A%';# Buscar por patrón
✏️ Actualizar y eliminar datos
UPDATE usuarios SET edad = 21 WHERE id = 1; # Actualizar fila(s)
UPDATE usuarios SET edad = edad + 1; # Actualizar todas las filas ⚠️
DELETE FROM usuarios WHERE id = 1; # Eliminar fila(s)
DELETE FROM usuarios; # Eliminar todas las filas ⚠️
🔗 Combinar tablas (JOIN)
SELECT * FROM pedidos
INNER JOIN usuarios ON pedidos.usuario_id = usuarios.id; # Solo coincidencias
SELECT * FROM usuarios
LEFT JOIN pedidos ON usuarios.id = pedidos.usuario_id; # Todo de la izquierda
SELECT * FROM usuarios
RIGHT JOIN pedidos ON usuarios.id = pedidos.usuario_id; # Todo de la derecha
📊 Funciones de agregación y agrupación
SELECT COUNT(*) FROM usuarios; # Contar registros
SELECT AVG(edad) FROM usuarios; # Promedio
SELECT SUM(total) FROM pedidos; # Suma
SELECT MIN(edad), MAX(edad) FROM usuarios; # Mínimo y máximo
SELECT edad, COUNT(*) FROM usuarios GROUP BY edad; # Agrupar
SELECT edad, COUNT(*) FROM usuarios
GROUP BY edad HAVING COUNT(*) > 1; # Filtrar grupos
👤 Usuarios y permisos
CREATE USER 'nuevo'@'localhost' IDENTIFIED BY 'clave'; # Crear usuario
ALTER USER 'nuevo'@'localhost' IDENTIFIED BY 'clave'; # Modificar clave
GRANT ALL PRIVILEGES ON mi_bd.* TO 'nuevo'@'localhost'; # Dar todos los permisos
GRANT SELECT, INSERT ON mi_bd.* TO 'nuevo'@'localhost'; # Dar permisos específicos
FLUSH PRIVILEGES; # Aplicar cambios de permisos
REVOKE INSERT ON mi_bd.* FROM 'nuevo'@'localhost'; # Quitar permiso
DROP USER 'nuevo'@'localhost'; # Eliminar usuario
SHOW GRANTS FOR 'nuevo'@'localhost'; # Ver permisos de un usuario
💾 Backup y restauración
mysqldump -u usuario -p mi_bd > backup.sql # Exportar base de datos
mysqldump -u usuario -p --all-databases > all.sql # Exportar todas las BD
mysql -u usuario -p mi_bd < backup.sql # Importar/restaurar backup
🧩 Índices y claves
SHOW INDEX FROM usuarios; # Ver índices de una tabla
CREATE INDEX idx_nombre ON usuarios (nombre); # Crear índice
DROP INDEX idx_nombre ON usuarios; # Eliminar índice
ℹ️ Otros
STATUS; # Estado del servidor y conexión
# Reescribir IDs correlativos
SET @count = 0;
UPDATE crm_usuarios SET id_crm_usuarios = @count := @count + 1;
Tip: Todas las sentencias SQL deben terminar en
;. Usa\Gen vez de;al final de unSELECTpara ver el resultado en formato vertical (útil con muchas columnas).