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');
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.
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 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.
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 FROM clientes; borra todos los clientes. Igual que con UPDATE, siempre verificá primero con un SELECT usando el mismo WHERE.
TRUNCATE vs DELETE
| DELETE | TRUNCATE | |
|---|---|---|
| Puede usar WHERE | Sí | No — borra todo siempre |
| Velocidad | Fila por fila | Resetea la tabla (más rápido) |
| AUTO_INCREMENT | No se resetea | Vuelve a 1 |
| Se puede deshacer | Sí (en transacción) | No |
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;
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.
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