El Lenguaje de control de transacción es, o TCL, son comandos de SQL (COMMIT, ROLLBACK, etc.) que permiten manejar transacciones en una base de datos relacional, por lo que es importante primeramente aclarar el concepto de transacción.
Transacciones en una base de datos relacional
Imaginémonos por un momento las operaciones que se deben realizar en un banco cuando se transfiere dinero de una cuenta a otra:
- Extraer (restar) la cantidad a transferir de la cuenta de origen.
- Ir a la cuenta destino y agregar (sumar) la cantidad transferida.
Las dos operaciones se deberán realizar en una base de datos (específicamente se implementarían con dos comandos UPDATE que es el comando de DML que permite modificar registros en una tabla); pero ¿qué sucede si por alguna razón se le envían las dos operaciones a la base de datos pero solo se pudiera realizar la primera? (por que se produce una falla en las comunicaciones, fallas de energía eléctrica, error de sintáxis en el segundo comando y no en el primero, etc.). El problema que se presentaría sería que se le restaría el monto de la operación a la cuenta origen pero no se sumaría a la cuenta destino y se le perdería el rastro al dinero y habría inconsistencias en la información.
Una situación más compleja, pero más común en el día a día, es una operación de compra de productos en cualquier supermercado. Si el cliente se lleva 3 productos, por poner un ejemplo, las operaciones que se tienen que realizar en la base de datos son:
- Registrar la venta (regularmente en al menos dos tablas).
- Disminuir existencias en el inventarios, para cada uno de los 3 productos.
- Registrar la entrada de dinero para el corte de caja final del cajero.
- Realizar la operación bancaria si el pago se realiza con alguna tarjeta de crédito o débito.
Para resolver estos conflictos, las bases de datos relacionales manejan el concepto de transacción, que no es más que agrupar todas las operaciones en un solo concepto, de tal manera que se le indica a la base de datos que haga todas las operaciones o ninguna (o todo o nada), de tal manera que siempre, todas las transferencias de dinero consten de dos operaciones, la de restar a la cuenta de origen y la de sumar el saldo a la cuenta de destino.
Implementación de TCL
Para hacer lo anterior es que SQL define diversos comandos para crear una transacción y luego grabar todos los datos o deshacer todas las operaciones de la transacción. Estos comandos están agrupados bajo el concepto de TCL. En este sentido es más difícil encontrar que todos los motores de bases de datos ocupen los mismos comandos, pero en general existen:
- BEGIN TRANSACTION – Para comenzar una transacción.
- COMMIT – Para grabar todos los cambios en la base de datos.
- ROLLBACK – Para deshacer los cambios de toda la transacción.
Cada motor implementa de una manera ligeramente diferente las transacciones, pero el concepto es el mismo:
- Se define el inicio de una transacción (BEGIN TRANS, BEGIN TRANSACTION).
- Se realizar todas las operaciones necesarias. (UPDATEs, INSERTs, DELETEs, etc.).
- Se intentan grabar todas las actualizaciones del punto anterior (COMMIT).
- Si hay un error se deshace todo lo que se haya actualizado para dejar la información tal y como estaba antes del punto 1 (ROLLBACK).