DELETE con USING y patrones seguros
Elimine filas unidas a otras tablas con DELETE ... USING y use transacciones + SELECT primero para verificar antes de realizar operaciones destructivas.
DELETE con USING y patrones seguros es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
DELETE básico
Elimine las filas coincidentes:
DELETE FROM users WHERE id = 1;Pruebe siempre primero con SELECT
Antes de cualquier DELETE, ejecute el mismo WHERE con SELECT para confirmar el número de filas:
SELECT COUNT(*) FROM orders
WHERE status = 'cancelled' AND created_at < NOW() - INTERVAL '1 year';DELETE en una transacción
Incluya las operaciones destructivas en una transacción para poder usar ROLLBACK:
BEGIN;
DELETE FROM orders WHERE status = 'cancelled' AND ...;
SELECT COUNT(*) FROM orders; -- sanity check
-- COMMIT; or ROLLBACK;DELETE sin WHERE es un desastre
DELETE FROM users; vacía la tabla. No hay ningún botón para deshacerlo. Sea precavido: ese segundo adicional que requiere escribir un WHERE es un seguro barato.
DELETE … USING (borrado con JOIN de PostgreSQL)
Elimine filas de una tabla basándose en otra:
DELETE FROM orders o
USING users u
WHERE u.id = o.user_id
AND u.is_banned = true;DELETE con subconsulta
Alternativa estándar:
DELETE FROM orders
WHERE user_id IN (SELECT id FROM users WHERE is_banned);Cascadas de claves foráneas
Si orders.user_id tiene ON DELETE CASCADE, al eliminar un usuario se eliminan automáticamente sus pedidos. Es práctico, pero peligroso; úselo con moderación.
ALTER TABLE orders
ADD CONSTRAINT orders_user_fk
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE;Borrados lógicos
Muchas aplicaciones no eliminan realmente las filas: establecen una marca de tiempo deleted_at:
UPDATE users SET deleted_at = NOW() WHERE id = $1;
-- Every query then has:
WHERE deleted_at IS NULLLimpieza de datos antiguos
Para limpiar periódicamente tablas grandes, elimine los datos en lotes y evite las transacciones de larga duración:
DELETE FROM events
WHERE id IN (
SELECT id FROM events
WHERE created_at < NOW() - INTERVAL '90 days'
LIMIT 10000
);
-- run this in a loop until it returns 0 rowsTRUNCATE: cuando importa la velocidad
Si realmente quiere vaciar una tabla, TRUNCATE es más rápido que DELETE porque no analiza las filas. Sin embargo, no activa los triggers ROW y no se puede revertir en todas las configuraciones:
TRUNCATE TABLE staging_orders;
TRUNCATE TABLE staging_orders RESTART IDENTITY CASCADE;RETURNING de DELETE
Recupere las filas eliminadas; resulta útil para archivarlas:
WITH deleted AS (
DELETE FROM orders WHERE status = 'archived' RETURNING *
)
INSERT INTO orders_archive SELECT * FROM deleted;Resumen
DELETE es la instrucción más peligrosa. Patrones defensivos:
- Ejecute primero SELECT
- Use BEGIN; ... ; ROLLBACK como simulación
- Realice los borrados grandes en lotes
- Prefiera los borrados lógicos para los datos visibles para el usuario
- Use TRUNCATE únicamente en tablas de staging
Comprobación rápida
Ha ejecutado DELETE FROM users; sin WHERE. ¿Qué debe hacer?
Preguntas frecuentes
¿La lección «DELETE con USING y patrones seguros» es gratis?
Sí — el texto completo de «DELETE con USING y patrones seguros» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «DELETE con USING y patrones seguros»?
Elimine filas unidas a otras tablas con DELETE ... USING y use transacciones + SELECT primero para verificar antes de realizar operaciones destructivas. Practicas SQL Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Academy?
No se requiere experiencia previa. SQL Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «DELETE con USING y patrones seguros»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Academy?
Sí. Cada lección de SQL Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- INSERT con varias filas
- UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
- UPDATE con FROM y actualizaciones al estilo JOIN
- DELETE con USING y patrones seguros