Arquitecto de Datos SQL
(AsQ)
SESIÓN 08: Laboratorio - Inserción,
Actualización y Eliminación de Datos
Objetivo de Aprendizaje
Realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en
una base de datos.
Introducción a las Operaciones CRUD
Estas son las cuatro operaciones fundamentales en la gestión de datos persistentes:
Create (Crear) Read (Leer) Update Delete (Eliminar)
Añadir nuevos registros Consultar información (Actualizar) Eliminar información de
o entradas a la base de existente en la base de Modificar registros la base de datos
datos mediante datos usando comandos existentes en la base de mediante comandos
comandos INSERT. SELECT. datos con comandos DELETE.
UPDATE.
Sentencia INSERT
Permite añadir nuevos registros a una tabla.
Sintaxis básica:
INSERT INTO nombre_tabla (columna1, columna2, ...)
VALUES (valor1, valor2, ...);
Ejemplo:
INSERT INTO clientes (nombre, apellido, email)
VALUES ('Ana', 'García', '[Link]@[Link]');
Variantes de INSERT
Insertar múltiples registros:
INSERT INTO productos (nombre, precio, stock) VALUES
('Producto A', 19.99, 100),
('Producto B', 29.99, 50),
('Producto C', 39.99, 75);
Insertar desde otra tabla (INSERT INTO SELECT):
INSERT INTO clientes_vip (id_cliente, nombre, email)
SELECT id_cliente, nombre, email
FROM clientes
WHERE total_compras > 10000;
Manejo de columnas en INSERT
Con columnas autoincrement:
INSERT INTO categorias (nombre, descripcion)
VALUES ('Electrónicos', 'Gadgets y dispositivos electrónicos');
-- id_categoria se genera automáticamente
Con valores por defecto:
INSERT INTO usuarios (nombre, fecha_registro)
VALUES ('Carlos', DEFAULT);
-- fecha_registro usará el valor predeterminado (ej. CURRENT_TIMESTAMP)
Omitiendo columnas con valores por defecto:
INSERT INTO productos (nombre, precio)
VALUES ('Nuevo producto', 29.99);
-- stock y otras columnas usarán sus valores por defecto
Sentencia UPDATE
Permite modificar registros existentes en una tabla.
Sintaxis básica:
UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2, ...
WHERE condicion;
¡IMPORTANTE!
Siempre incluir una cláusula WHERE en las sentencias UPDATE, a menos que realmente se desee actualizar
todos los registros.
Ejemplos de UPDATE
Actualizar un solo registro:
UPDATE clientes
SET telefono = '555-1234', direccion = 'Nueva Dirección 123'
WHERE id_cliente = 101;
Actualizar múltiples registros:
UPDATE productos
SET precio = precio * 1.05
WHERE id_categoria = 3;
-- Aumenta en 5% el precio de todos los productos de la categoría 3
UPDATE con subconsultas
Actualizar basado en datos de otra tabla:
UPDATE empleados
SET salario = salario * 1.10
WHERE departamento IN (
SELECT id_departamento
FROM departamentos
WHERE nombre = 'Ventas' OR nombre = 'Marketing'
);
Operaciones aritméticas en UPDATE
-- Incrementar un contador
UPDATE articulos
SET vistas = vistas + 1
WHERE id_articulo = 502;
-- Calcular impuestos
UPDATE facturas
SET total_con_impuestos = subtotal * 1.16
WHERE fecha >= '2024-01-01';
UPDATE con CASE
UPDATE productos
SET estado = CASE
WHEN stock = 0 THEN 'Agotado'
WHEN stock < 10 THEN 'Bajo stock'
WHEN stock >= 10 AND stock < 50 THEN 'Disponible'
ELSE 'Abundante'
END;
Sentencia DELETE
Permite eliminar registros de una tabla.
Sintaxis básica:
DELETE FROM nombre_tabla
WHERE condicion;
¡IMPORTANTE!
Al igual que con UPDATE, siempre usar WHERE en DELETE, a menos que realmente se desee eliminar
todos los registros.
Ejemplos de DELETE
Eliminar un solo registro:
DELETE FROM clientes
WHERE id_cliente = 205;
Eliminar múltiples registros:
DELETE FROM pedidos
WHERE fecha < '2023-01-01' AND estado = 'Completado';
DELETE con subconsultas
DELETE FROM carritos_abandonados
WHERE id_usuario IN (
SELECT id_usuario
FROM usuarios
WHERE ultima_actividad < DATE_SUB(NOW(), INTERVAL 90 DAY)
);
TRUNCATE TABLE
Alternativa a DELETE cuando se desean eliminar todos los registros.
Comparación con DELETE:
Más rápido que DELETE
Reinicia los contadores de autoincrement
No se puede usar WHERE
No se registra en el log de transacciones (en algunos motores)
TRUNCATE TABLE registros_temporales;
Break
Tomemos 10 minutos para descansar y refrescar la mente.
¡Regresamos pronto!
Transacciones en SQL
Definición y Concepto
Una transacción es una secuencia de operaciones realizadas como
una única unidad lógica de trabajo.
START TRANSACTION;
-- Operaciones SQL
COMMIT; -- o ROLLBACK;
Propiedades ACID
Las transacciones en bases de datos garantizan las siguientes propiedades fundamentales:
Atomicidad Consistencia Aislamiento Durabilidad
Una transacción es "todo La transacción lleva la Las transacciones se Una vez completada
o nada". Si una parte base de datos de un ejecutan de manera (commit), los cambios
falla, toda la transacción estado válido a otro aislada entre sí, sin son permanentes y
falla y se revierte estado válido, interferencias, como si sobreviven incluso a
(rollback). manteniendo la cada una fuera la única fallos del sistema.
integridad de los datos. en el sistema.
Ejemplo: Transferencia Bancaria
Las transacciones garantizan que las operaciones bancarias se completen correctamente:
Sin transacciones Con transacciones
Si la segunda operación falla, el dinero podría La operación completa se confirma o se cancela:
desaparecer:
START TRANSACTION;
-- ¿Qué pasa si la segunda operación falla? UPDATE cuentas SET saldo = saldo - 1000 WHERE
UPDATE cuentas SET saldo = saldo - 1000 WHERE id_cuenta = 1;
id_cuenta = 1; UPDATE cuentas SET saldo = saldo + 1000 WHERE
UPDATE cuentas SET saldo = saldo + 1000 WHERE id_cuenta = 2;
id_cuenta = 2; COMMIT; -- Confirmar si todo va bien
-- ROLLBACK; -- Deshacer en caso de error
Comandos Principales
1 START 2 COMMIT
TRANSACTION / Guarda los cambios
BEGIN permanentemente
Inicia una transacción
3 ROLLBACK 4 SAVEPOINT
Deshace todos los Crea un punto de
cambios desde el inicio de guardado dentro de la
la transacción transacción
5 ROLLBACK TO SAVEPOINT
Deshace cambios hasta un punto específico
Niveles de Aislamiento
Los niveles de aislamiento controlan cómo interactúan las transacciones:
Nivel Descripción Problemas resueltos
READ UNCOMMITTED Menor aislamiento Ninguno
READ COMMITTED Lecturas solo de datos Lecturas sucias
confirmados
REPEATABLE READ Las mismas consultas siempre Lecturas no repetibles
dan los mismos resultados
SERIALIZABLE Mayor aislamiento, Todos los problemas
transacciones ejecutadas
secuencialmente
Buenas Prácticas
Mantener las transacciones lo más cortas posible
Evitar operaciones de usuario (interacciones) dentro de una transacción
Gestionar correctamente los errores
Considerar el nivel de aislamiento adecuado según el caso de uso
Caso de Uso: Sistema de Inventario
START TRANSACTION; -- 1. Registrar el pedido INSERT INTO pedidos (cliente_id, fecha, total) VALUES (101, NOW(),
1299.99); SET @pedido_id = LAST_INSERT_ID();
-- 2. Registrar los detalles del pedido
INSERT INTO detalles_pedido (pedido_id, producto_id, cantidad, precio)
VALUES (@pedido_id, 15, 1, 1299.99);
-- 3. Actualizar el inventario
UPDATE inventario SET stock = stock - 1 WHERE producto_id = 15;
-- 4. Verificar que haya suficiente stock
IF (SELECT stock FROM inventario WHERE producto_id = 15) < 0 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;
Laboratorio Práctico
Uso de Transacciones
Las transacciones permiten agrupar operaciones SQL para que se ejecuten como una unidad atómica.
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 1000 WHERE id_cuenta = 1; UPDATE cuentas SET saldo = saldo + 1000
WHERE id_cuenta = 2;
-- Si todo va bien COMMIT;
-- Si hay un problema -- ROLLBACK;
Ventajas de las Transacciones
Atomicidad: Todas las operaciones se completan o ninguna
Consistencia: La base de datos pasa de un estado válido a otro
Aislamiento: Las operaciones no son visibles para otras transacciones hasta que se complete
Durabilidad: Una vez confirmada, la transacción persiste
REPLACE
En MySQL, REPLACE funciona como un INSERT, pero si hay un registro existente con la misma clave primaria
o índice único, lo reemplaza.
REPLACE INTO productos (id_producto, nombre, precio)
VALUES (101, 'Producto Actualizado', 25.99);
Aplicación en el Sector Financiero
Registro de transacciones:
sql
INSERT INTO transacciones
(cuenta_origen, cuenta_destino, monto, tipo, fecha)
VALUES
(10245, 10798, 500.00, 'Transferencia', NOW());
Actualización de saldos:
sql
UPDATE cuentas
SET saldo = saldo - 500.00
WHERE numero_cuenta = 10245;
UPDATE cuentas
SET saldo = saldo + 500.00
WHERE numero_cuenta = 10798;
Evaluación Sesión 08
Objetivo de aprendizaje
¿Consideras que el objetivo de aprendizaje fue alcanzado?