INSERT, UPDATE y DELETE

Hasta ahora solo leíste datos con SELECT. Con INSERT, UPDATE y DELETE podés crear, modificar y eliminar registros — las tres operaciones de escritura de SQL.

INSERT — agregar registros

INSERT INTO agrega filas nuevas a una tabla. Siempre especificá las columnas explícitamente — si el esquema cambia y no lo hacés, la query se rompe.

Insertar una fila

INSERT INTO clientes (nombre, email, ciudad, pais, fecha_registro)
VALUES ('Lucía Romero', 'lucia@mail.com', 'Mendoza', 'Argentina', '2025-03-15');

Insertar varias filas de una vez

INSERT INTO clientes (nombre, email, ciudad, pais, fecha_registro)
VALUES
    ('Martín López', 'martin@mail.com', 'Tucumán',    'Argentina', '2025-04-01'),
    ('Sofía Méndez', 'sofia@mail.com',  'Salta',      'Argentina', '2025-04-02'),
    ('Diego Torres', 'diego@mail.com',  'Corrientes', 'Argentina', '2025-04-03');
No incluyas el id si es AUTO_INCREMENT

MySQL genera el id automáticamente. Si lo incluís podés generar conflictos. Podés verificar el id asignado con SELECT LAST_INSERT_ID() después del INSERT.

Probá el Ejemplo 1: INSERT nuevo cliente

UPDATE — modificar registros

UPDATE modifica los valores de filas existentes. Siempre usá WHERE para no afectar toda la tabla.

-- Actualizar un campo
UPDATE clientes
SET ciudad = 'Rosario'
WHERE id = 3;

-- Actualizar varios campos a la vez
UPDATE clientes
SET ciudad = 'Buenos Aires',
    email  = 'nuevo@mail.com'
WHERE id = 5;

-- Usar el valor actual en la operación (aumento de precios)
UPDATE productos
SET precio = ROUND(precio * 1.10, 2)
WHERE id_categoria = 1;
UPDATE sin WHERE modifica TODOS los registros

UPDATE clientes SET ciudad = 'Rosario' cambia la ciudad de absolutamente todos los clientes. La estrategia segura: primero ejecutá un SELECT con el mismo WHERE para ver qué filas vas a tocar.

Probá el Ejemplo 2: UPDATE de precio

DELETE — eliminar registros

DELETE elimina filas de una tabla. No hay deshacer en SQL — si no tenés backup y ejecutás un DELETE masivo, los datos se pierden.

-- Eliminar un registro específico
DELETE FROM clientes
WHERE id = 15;

-- Eliminar según condición
DELETE FROM ordenes
WHERE estado = 'cancelado';

-- Eliminar registros más viejos que una fecha
DELETE FROM ordenes
WHERE fecha < '2023-01-01';
DELETE sin WHERE vacía la tabla entera

DELETE FROM clientes; borra todos los clientes. Igual que con UPDATE, siempre verificá primero con un SELECT usando el mismo WHERE.

TRUNCATE vs DELETE

DELETETRUNCATE
Puede usar WHERESíNo — borra todo siempre
VelocidadFila por filaResetea la tabla (más rápido)
AUTO_INCREMENTNo se reseteaVuelve a 1
Se puede deshacerSí (en transacción)No
Probá el Ejemplo 3: Verificar antes de DELETE

Verificar antes de modificar

El flujo más seguro para UPDATE y DELETE es: primero ejecutar un SELECT con el mismo WHERE, revisar los resultados, y recién entonces ejecutar la modificación. En el editor podés hacerlo en dos pasos:

-- Paso 1: verificar qué filas van a cambiar
SELECT id, nombre, precio
FROM productos
WHERE id_categoria = 2;

-- Paso 2: ejecutar el UPDATE solo si el resultado es el esperado
UPDATE productos
SET precio = ROUND(precio * 0.90, 2)
WHERE id_categoria = 2;
LAST_INSERT_ID()

Después de un INSERT, podés obtener el id generado con SELECT LAST_INSERT_ID(). Es útil cuando necesitás referenciar el registro recién creado en otra tabla.

Probá el Ejemplo 4: Combo SELECT + UPDATE

Buenas Prácticas

  • Siempre WHERE en UPDATE y DELETE — sin excepción; si querés afectar todo, escribilo explícitamente
  • Verificá con SELECT primero — usá el mismo WHERE del UPDATE/DELETE para ver exactamente qué filas vas a modificar
  • Especificá las columnas en INSERT — nunca uses INSERT INTO tabla VALUES (...) sin listar columnas
  • Hacé backups antes de cambios masivos — un UPDATE o DELETE sin backup en producción es un riesgo enorme
  • Usá transacciones para operaciones dependientes — si un INSERT depende de otro, envolvelos en START TRANSACTION / COMMIT