0Pricing
SQL Academy · Lección

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 NULL

Limpieza 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 rows

TRUNCATE: 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

  1. INSERT con varias filas
  2. UPSERT: ON CONFLICT DO UPDATE (PostgreSQL)
  3. UPDATE con FROM y actualizaciones al estilo JOIN
  4. DELETE con USING y patrones seguros
← Volver a SQL Academy