2.6 Gestión de datos

2.6.1 Operaciones CRUD

2.6.1.1 Inserción de tuplas

INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);
  • El número de valores debe coincidir con el número de columnas especificadas

  • Si alguna columna de la tabla no se indica, su valor será el indicado por defecto o NULL

    • Por ejemplo, AUTOINCREMENT
  • Si no se especifica alguna columna con restricción NOT NULL, la inserción producirá un error

  • Igualmente, dará error si no se cumple cualquier otra restricción

  • Es posible insertar datos a partir de otra consulta:

INSERT INTO TopClientes (nombre, gasto_total)
  SELECT nombre, SUM(importe)
  FROM Ventas
  GROUP BY nombre
  HAVING SUM(monto) > 1000;

2.6.1.2 Modificación de datos

UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE  CONDITION ];
  • Si no se incluye WHERE, se actualiza toda la tabla. Lo más habitual es utilizar la clave primaria en el WHERE.

  • Se puede actualizar una columna a partir de un cálculo:

UPDATE Ventas
SET total = cantidad * precio_unitario;
  • Se puede actualizar a partir de una consulta
UPDATE Album
SET artista_id = (
    SELECT id FROM Artista WHERE nombre = 'Queen'
  )
WHERE titulo = 'A Night at the Opera';
  • Si la actualización afecta una columna usada en la condición, la comprobación se hace sobre el valor original, no el nuevo.

  • Al actualizar también se verifican las restricciones

  • Buenas prácticas:

    • Realizar copias de seguridad antes de actualizaciones masivas.
    • Usar transacciones si se actualizan varias tablas relacionadas.
    • No modificar claves primarias salvo necesidad justificada.
    • Revisar restricciones de integridad antes de ejecutar.

2.6.1.3 Eliminación de datos

DELETE FROM table_name
WHERE  {CONDITION};
  • Antes de borrar, se comprueban las restricciones de la Base de Datos.
  • Al usar DELETE, los valores de una columna AUTOINCREMENT no se modifican: el siguiente INSERT seguirá con el siguiente número disponible.
  • Buenas prácticas:
    • Siempre incluir WHERE salvo que se quiera vaciar la tabla.
    • Comprobar cuántas filas se afectarán con SELECT COUNT(*) … antes.
    • Usar transacciones para borrados masivos o dependientes.
    • Revisar reglas ON DELETE en claves foráneas (para evitar borrados en cascada inesperados).
    • Realizar copia de seguridad antes de operaciones grandes.

2.6.1.4 Gestión de transacciones

BEGIN;

  ...
  
COMMIT;

ROLLBACK;
  • Ejemplo: si alguna operación falla, no se realiza ninguna
BEGIN;
  INSERT INTO Pedido VALUES (1, '2025-11-04', 100);
  UPDATE Cliente SET saldo = saldo - 100 WHERE id = 1;
COMMIT;
  • Las transacciones cumplen las propiedades ACID
Propiedad Significado
Atomicidad Todas las operaciones se ejecutan como una sola — o todas, o ninguna.
Consistencia Los datos pasan de un estado válido a otro estado válido.
Aislamiento (Isolation) Cada transacción se ejecuta como si fuera la única.
Durabilidad Una vez hecho COMMIT, los cambios se hacen persistentes.
  • Los cambios realizados no son visibles para otras conexiones hasta que se hace COMMIT

  • Inserciones/actualizaciones en bloque son mucho más rápidas dentro de una transacción