CodeGym /Cursos /SQL SELF /Introducción a transacciones: BEGIN,

Introducción a transacciones: BEGIN, COMMIT, ROLLBACK

SQL SELF
Nivel 22 , Lección 1
Disponible

En nuestro curso vamos a ver las transacciones tres veces. Y cada vez descubriremos algo nuevo. Ahora vamos a estudiar lo básico de las transacciones. Más adelante en el curso veremos los niveles de aislamiento de transacciones, y al final — los matices de trabajar con transacciones anidadas.

¿Qué es una transacción?

Vamos a empezar por lo simple — la definición. Una transacción es un grupo de acciones que se ejecutan solo juntas. Eso es todo.

De aquí sale una conclusión importante: si al ejecutar alguna (¡cualquiera!) acción del grupo ocurre un fallo, hay que deshacer el resultado de todas las demás acciones y devolver el sistema a su estado original.

Desde el punto de vista de SQL, una transacción es un conjunto de acciones (por ejemplo, insertar, actualizar o borrar datos), que garantiza que o todas las operaciones dentro de la transacción se completan con éxito, o ninguna de ellas se ejecuta. Este comportamiento hace que trabajar con bases de datos sea fiable y coherente, sobre todo en situaciones críticas como procesar pagos o actualizar datos relacionados.

Imagina que transfieres dinero entre dos cuentas bancarias. Si lo simplificamos, tenemos dos operaciones seguidas:

  1. Se descuenta una cantidad de una cuenta.
  2. La misma cantidad se abona en la otra cuenta.

Si ocurre un fallo justo al final de la operación (por ejemplo, se cae el servidor), es importante que ningún usuario salga perdiendo. O sea, o los dos pasos se completan con éxito (la transacción se confirma), o los dos pasos se deshacen (la transacción se cancela).

Transacciones y los principios ACID

Las transacciones se basan en los principios ACID, que nos recuerdan cuatro características clave:

  • Atomicity (Atomicidad): todo o nada. O todas las operaciones dentro de la transacción se ejecutan, o se deshacen.
  • Consistency (Consistencia): los datos quedan en un estado correcto antes y después de la transacción.
  • Isolation (Aislamiento): cada transacción funciona como si fuera la única en el sistema.
  • Durability (Durabilidad): después de confirmar, los datos se guardan incluso si el servidor se cae.

Comandos básicos para manejar transacciones

¡Ahora prepárate para la práctica! Aquí tienes los tres comandos principales para manejar transacciones:

  1. BEGIN
    Inicia una nueva transacción. Todas las operaciones siguientes se ejecutarán dentro de ella.

  2. COMMIT
    Confirma los cambios. Después de este comando, todas las acciones se vuelven permanentes.

  3. ROLLBACK
    Deshace los cambios. Si algo sale mal, puedes deshacer la transacción y los datos quedan como estaban.

Sintaxis básica de transacciones

Estructura simple de una transacción:

BEGIN; 
-- aquí van tus operaciones SQL
COMMIT;

Ejemplo de uso de ROLLBACK:

BEGIN;
-- cambio de la tabla students
UPDATE students
SET grade = grade + 10
WHERE id = 1;

-- ¡Oh! Nos dimos cuenta de que fue un error.
ROLLBACK;

Ejemplo de uso de una transacción en un caso real

Supón que tenemos las siguientes tablas:

students:

id name grade
1 Otto Lin 85
2 Anna Song 90

courses:

course_id course_name
1 Matemáticas
2 Historia

Supongamos que queremos inscribir a un estudiante en un curso y actualizar su nota media al mismo tiempo:

BEGIN;

-- Paso 1: Añadimos un registro en la tabla "inscripciones a cursos"
INSERT INTO course_enrollments (student_id, course_id)
VALUES (1, 2);

-- Paso 2: Actualizamos la nota media del estudiante
UPDATE students
SET grade = grade + 5
WHERE id = 1;

COMMIT;

¿Qué pasa si el servidor se cae entre el primer y el segundo paso? Si no usáramos una transacción, los datos quedarían en un estado inconsistente: la inscripción al curso se añade, pero la nota media no se actualiza. Pero con una transacción, o se hacen las dos operaciones o se deshacen ambas.

Manejo de errores dentro de transacciones

A veces algo sale mal y hay que manejar el error bien. En PostgreSQL la transacción se deshace automáticamente si ocurre un error.

Vamos a equivocarnos a propósito y ver qué pasa. Imagina que tenemos una restricción de unicidad en la columna student_id de la tabla course_enrollments. Vamos a intentar añadir una fila duplicada:

BEGIN;

INSERT INTO course_enrollments (student_id, course_id)
VALUES (1, 2);

-- FIN DE LA TRANSACCIÓN (aún no ejecutado)
COMMIT;

Si intentas insertar un estudiante que ya está inscrito en el curso, ocurrirá un error y PostgreSQL terminará la transacción automáticamente con un rollback.

Uso de ROLLBACK para deshacer manualmente

A menudo no puedes prever los errores y querrás deshacer la transacción si algo sale mal:

BEGIN;

-- Añadimos un nuevo estudiante
INSERT INTO students (name, grade)
VALUES ('Omori Sanny', 75);

-- ¡Ups! Nos dimos cuenta de que añadimos al estudiante por error.
ROLLBACK;

Después del comando ROLLBACK la tabla queda igual — Omori Sanny nunca apareció en students.

Consejos útiles y errores típicos

Trabajar con transacciones es más fácil si recuerdas unas reglas importantes:

  • Usa siempre transacciones si tu operación tiene más de un paso, sobre todo si modificas datos en varias tablas.
  • Nunca olvides confirmar los cambios (COMMIT). Si no, la transacción queda sin terminar y los datos no cambian.
  • Envuelve las operaciones complejas en transacciones para mantener la coherencia de los datos.
  • Si ves un error en cualquier paso, no dudes en usar ROLLBACK.

Ahora que sabes cómo controlar las operaciones con transacciones, ¡es el momento de ponerlo en práctica y pasar a estudiar transacciones para asegurar la integridad de los datos!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION