MySQL iniciando con SQL
Ejecutar el comando de conexión
mysql -h localhost -u root -p[opcional]
• -h localhost → servidor local
• -u root → indica el usuario (puede ser otro, como admin o usuario).
• -p → solicita la contraseña.
mysql>
Probar comandos básicos
• Ver bases de datos disponibles:
SHOW DATABASES;
• Seleccionar una base de datos:
USE [BD];
• Ver tablas dentro de la base:
SHOW TABLES;
. Salir de MySQL
EXIT;
o
QUIT;
DDL en MySQL
1. Introducción a DDL
• Diferencia entre DDL y DML.
• Sentencias principales: CREATE, ALTER, DROP, TRUNCATE.
• Ciclo de vida de una base de datos.
2. Creación de Bases de Datos
• Concepto: Espacio lógico para agrupar tablas.
• Ejemplo:
CREATE DATABASE Ejemplo;
USE ejemplo;
3. Creación de Tablas
• Sintaxis general de CREATE TABLE.
• Tipos de datos en MySQL (INT, VARCHAR, DATE, DECIMAL, etc.).
• Definición de claves primarias y foráneas.
CREATE TABLE clientes (
id_cliente INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
correo VARCHAR(100) UNIQUE,
fecha_registro DATE DEFAULT CURRENT_DATE
);
4. Modificación de Tablas
• Agregar columnas: ALTER TABLE ... ADD.
• Modificar columnas: ALTER TABLE ... MODIFY.
• Eliminar columnas: ALTER TABLE ... DROP.
• Ejemplo:
ALTER TABLE clientes ADD telefono VARCHAR(15);
ALTER TABLE clientes MODIFY correo VARCHAR(150);
ALTER TABLE clientes DROP telefono;
5. Restricciones y Reglas de Integridad
• PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK.
• Ejemplo:
CREATE TABLE pedidos (
id_pedido INT AUTO_INCREMENT PRIMARY KEY,
id_cliente INT,
fecha DATE,
FOREIGN KEY (id_cliente) REFERENCES clientes(id_cliente)
);
6. Eliminación de Objetos
• Eliminar tablas: DROP TABLE.
• Eliminar bases de datos: DROP DATABASE.
• Vaciar tablas: TRUNCATE TABLE.
• Ejemplo:
DROP TABLE pedidos;
CREATE TABLE pedidos (
id_pedido INT AUTO_INCREMENT PRIMARY KEY,
id_cliente INT,
fecha DATE);
le agregaremos la foránea con constraint:
alter table pedidos add CONSTRAINT fk_pedido FOREIGN KEY (id_cliente)
REFERENCES clientes(id_cliente);
DROP DATABASE ejemplo;
Ejemplo completo
Volvemos a crear la base de datos Ejemplo
CREATE TABLE Clientes (
IdCliente INT PRIMARY KEY,
Nombre VARCHAR(100) NOT NULL,
Email VARCHAR(150) UNIQUE,
Edad INT,
CONSTRAINT CHK_Edad CHECK (Edad >= 18)
);
Puntos clave
• IdCliente: clave primaria, garantiza que no haya dos clientes con el mismo ID.
• Nombre: no puede ser nulo, lo que asegura que siempre se registre un nombre.
• Email: debe ser único, evitando duplicados en la base de datos.
• Edad: se valida con un CHECK para que sea ≥ 18, útil en sistemas donde solo adultos
pueden registrarse.
La sintaxis general de un INSERT en SQL depende de si quieres especificar columnas o
no. Te muestro las dos formas más comunes:
Forma explícita (recomendada)
Indicas las columnas en las que vas a insertar valores:
INSERT INTO NombreTabla (Columna1, Columna2, Columna3, ...)
VALUES (Valor1, Valor2, Valor3, ...);
Ejemplo aplicado a Clientes:
INSERT INTO Clientes (IdCliente, Nombre, Email, Edad)
VALUES (1, 'Juan Pérez', '[Link]@[Link]', 25);
Forma implícita (menos usada)
No indicas columnas, pero debes dar valores en el mismo orden en que fueron definidas en
la tabla:
INSERT INTO NombreTabla
VALUES (Valor1, Valor2, Valor3, ...);
Ejemplo:
INSERT INTO Clientes
VALUES (2, 'Ana Gómez', '[Link]@[Link]', 30);
Ahora intentas insertar:
INSERT INTO Clientes (IdCliente, Nombre, Email, Edad)
VALUES (2, 'Ana Pérez', '[Link]@[Link]', 25);
Pero si intentas:
INSERT INTO Clientes (IdCliente, Nombre, Email, Edad)
VALUES (3, 'Luis Gómez', '[Link]@[Link]', 16);
O intentas
-- Este insert sí funciona
INSERT INTO Clientes (IdCliente, Nombre, Email, Edad)
VALUES (3, 'Carlos López', '[Link]@[Link]', 30);
-- Otro intento
INSERT INTO Clientes (IdCliente, Nombre, Email, Edad)
VALUES (4, 'María Torres', '[Link]@[Link]', 28);
Ejemplo con nombre de constraint (profesional)
CREATE TABLE Productos (
IdProducto INT,
Nombre VARCHAR(100) NOT NULL,
Precio DECIMAL(10,2),
CONSTRAINT PK_Productos PRIMARY KEY (IdProducto)
);
Primary Key compuesta
CREATE TABLE DetallePedidos (
IdPedido INT,
IdProducto INT,
Cantidad INT,
CONSTRAINT PK_DetallePedidos PRIMARY KEY (IdPedido, IdProducto)
);
Foreign Key
CREATE TABLE Pedidos (
IdPedido INT PRIMARY KEY,
FechaPedido DATE NOT NULL,
IdCliente INT,
CONSTRAINT FK_Pedidos_Clientes
FOREIGN KEY (IdCliente) REFERENCES Clientes(IdCliente)
);
Alter table DetallePedidos
add constraint fk_pedido_ FOREIGN KEY (IdPedido) REFERENCES
Pedidos(IdPedido);
Alter table DetallePedidos
add constraint fk_producto_ FOREIGN KEY (IdProducto) REFERENCES
Productos(IdProducto);
Ejercicio (Modelo de biblioteca en MySQL)
Create database biblioteca;
Use biblioteca;
CREATE TABLE Autor (
IdAutor INT AUTO_INCREMENT PRIMARY KEY,
Nombre VARCHAR(100),
Nacionalidad VARCHAR(50),
FechaNac DATE
);
CREATE TABLE Libro (
ISBN VARCHAR(20) PRIMARY KEY,
Titulo VARCHAR(200),
Idioma VARCHAR(50),
NroPags INT,
Referencia VARCHAR(20),
CONSTRAINT FK_Referencia FOREIGN KEY (Referencia) REFERENCES
Libro(ISBN)
);
CREATE TABLE Autor_Libro (
IdAutor INT,
ISBN VARCHAR(20),
PRIMARY KEY (IdAutor, ISBN),
FOREIGN KEY (IdAutor) REFERENCES Autor(IdAutor),
FOREIGN KEY (ISBN) REFERENCES Libro(ISBN)
);
CREATE TABLE Edicion (
IdEdicion INT AUTO_INCREMENT PRIMARY KEY,
ISBN VARCHAR(20),
Anho INT,
FOREIGN KEY (ISBN) REFERENCES Libro(ISBN)
);
CREATE TABLE Copia (
IdCopia INT AUTO_INCREMENT PRIMARY KEY,
Numero INT,
IdEdicion INT,
FOREIGN KEY (IdEdicion) REFERENCES Edicion(IdEdicion)
);
CREATE TABLE Usuario (
DUI VARCHAR(20) PRIMARY KEY,
Nombre VARCHAR(100),
Domicilio VARCHAR(200)
);
CREATE TABLE Prestamo (
IdPrestamo INT AUTO_INCREMENT PRIMARY KEY,
IdCopia INT,
DUI VARCHAR(20),
FechaPrestamo DATE,
FechaDevolucion DATE,
FOREIGN KEY (IdCopia) REFERENCES Copia(IdCopia),
FOREIGN KEY (DUI) REFERENCES Usuario(DUI)
);
Vamos a insertar registros:
Autores
INSERT INTO Autor (Nombre, Nacionalidad, FechaNac)
VALUES
('Gabriel García Márquez', 'Colombiana', '1927-03-06'),
('Isabel Allende', 'Chilena', '1942-08-02'),
('Mario Vargas Llosa', 'Peruana', '1936-03-28');
Libros
INSERT INTO Libro (ISBN, Titulo, Idioma, NroPags, Referencia)
VALUES
('ISBN001', 'Cien años de soledad', 'Español', 417, NULL),
('ISBN002', 'La casa de los espíritus', 'Español', 400, 'ISBN001'),
('ISBN003', 'La ciudad y los perros', 'Español', 350, NULL);
Autor–Libro
INSERT INTO Autor_Libro (IdAutor, ISBN)
VALUES (1, 'ISBN001'), (2, 'ISBN002'),(3, 'ISBN003');
Ediciones
INSERT INTO Edicion (ISBN, Anho)
VALUES ('ISBN001', 1967),('ISBN002', 1982),('ISBN003', 1963);
Copias
INSERT INTO Copia (Numero, IdEdicion)
VALUES (1, 1), (1, 2), (1, 3);
Usuarios
INSERT INTO Usuario (DUI, Nombre, Domicilio)
VALUES
('DUI001', 'Juan Pérez', 'San Vicente'),
('DUI002', 'María López', 'San Salvador'),
('DUI003', 'Carlos Hernández', 'Santa Ana');
Préstamos
INSERT INTO Prestamo (IdCopia, DUI, FechaPrestamo, FechaDevolucion)
VALUES
(1, 'DUI001', '2026-04-01', '2026-04-10'),
(2, 'DUI002', '2026-04-02', '2026-04-12'),
(3, 'DUI003', '2026-04-03', NULL);
Sintaxis de DELETE
DELETE FROM nombre_tabla
WHERE condición;
Elimina solo los registros que cumplen la condición.
Si omites WHERE, se borran todos los registros, pero la estructura de la tabla permanece.
Se puede combinar con ON DELETE CASCADE para que la eliminación se propague a tablas
relacionadas.
Sintaxis de TRUNCATE
TRUNCATE TABLE nombre_tabla;
Elimina todos los registros de la tabla de forma rápida.
No permite usar WHERE.
Reinicia los contadores de AUTO_INCREMENT.
Es más eficiente que DELETE sin condición, pero no activa triggers ni cascadas de
eliminación.
En resumen:
• Usa DELETE cuando quieras eliminar registros específicos o aprovechar cascadas.
• Usa TRUNCATE cuando quieras vaciar toda la tabla rápidamente y reiniciar contadores.