Descripción de transacciones
Una transacción es una o varias instrucciones T-SQL que se tratan como una unidad. Si se produce un error en una sola transacción, se producirá un error en todas las instrucciones. Si una transacción se realiza correctamente, sabe que todas las instrucciones de modificación de datos de la transacción se realizaron correctamente y se confirmaron en la base de datos.
Las transacciones garantizan que todas las instrucciones dentro de una transacción se completarán correctamente o que se producirá un error en todas; no se permite ninguna finalización parcial. Las transacciones encapsulan las operaciones que deben producirse lógicamente juntas, como varias entradas en tablas relacionadas que forman parte de una sola operación.
Considere una empresa que almacena las compras en una tabla Sales.Order y los pagos en una tabla Sales.Payment . Cuando alguien compra algo, ambas tablas deben actualizarse. Si esto se implementa sin transacciones y se produce un error cuando se escribe el pago en la base de datos, la inserción Sales.Order se seguirá confirmando, dejando la tabla de pago sin entrada.
Cuando se implementa con transacciones, se realizan ambas entradas o no se realiza ninguna entrada. Si se produce un error al escribir el pago en la tabla, también se revertirá la inserción del pedido. Esto significa que la base de datos siempre está en un estado coherente.
Debe tenerse en cuenta que esto hace referencia a errores graves, como errores de hardware o de red. Los errores en instrucciones SQL solo harían que la transacción se revierte en determinadas circunstancias y es importante revisar las unidades posteriores de este módulo para comprender completamente las implicaciones del uso de transacciones.
Hay diferentes tipos de transacciones:
Transacciones explícitas
Las palabras clave BEGIN TRANSACTION y COMMIT o ROLLBACK inician y finalizan cada lote de instrucciones. Esto le permite especificar qué instrucciones se deben confirmar o revertir en conjunto.
Transacciones implícitas
Se inicia una transacción cuando se ha completado la transacción anterior. Cada transacción se completa explícitamente con una instrucción COMMIT o ROLLBACK.
Características ACID
Los sistemas de procesamiento transaccional en línea (OLTP) requieren transacciones para cumplir las características "ACID":
- Atomicidad: cada transacción se trata como una sola unidad, que se realiza correctamente o falla por completo. Por ejemplo, una transacción que conlleve el adeudo de fondos de una cuenta y el abono de la misma cantidad en otra debe completar ambas acciones. Si alguna de las acciones no se puede completar, se debe producir un error en la otra.
- Coherencia : las transacciones solo pueden tomar los datos de la base de datos de un estado válido a otro. Para continuar con el ejemplo anterior del adeudo y el abono, el estado completado de la transacción debe reflejar la transferencia de fondos de una cuenta a la otra.
- Aislamiento : las transacciones simultáneas no pueden interferir entre sí y deben dar lugar a un estado de base de datos coherente. Por ejemplo, mientras que la transacción para transferir fondos de una cuenta a otra está en proceso, otra transacción que comprueba el saldo de estas cuentas debe devolver resultados coherentes: la transacción de comprobación de saldo no puede recuperar un valor para una cuenta que refleje el saldo antes de la transferencia y un valor para la otra cuenta que refleje el saldo después de la transferencia.
- Durabilidad : cuando se haya confirmado una transacción, permanecerá confirmada. Una vez que la transacción de transferencia de la cuenta se ha completado, los saldos revisados de las cuentas se conservan, de modo que, incluso si el sistema de base de datos se desactiva, la transacción confirmada se refleje cuando se vuelva a activar.