Contact Us

Kockpit is here to help you

Business Form

Understanding Transaction in SQL

In the world of relational databases, transactions play a pivotal role in maintaining data integrity and consistency. A series of one or more SQL statements that are carried out as a single work unit is called a transaction. This article delves into transaction management and the crucial ACID properties that ensure the reliability of your data.


Transactions are at the heart of managing data integrity and ensuring reliability in database systems. SQL, or Structured Query Language, provides a robust mechanism to manage these operations, guaranteeing the integrity of your data. One of the key concepts in SQL for achieving this is the “transaction.”

What is an SQL Transaction?

A transaction represents a logical unit of work, which can consist of one or more SQL statements. These statements can be anything from inserting records into a table to updating values or deleting data. What makes a transaction special is that it follows the principles of Atomicity, Consistency, Isolation, and Durability - collectively known as the ACID properties. 

Managing Transactions in SQL 

SQL databases provide a mechanism for managing transactions through the use of four fundamental operations: BEGIN, COMMIT, ROLLBACK, and SAVEPOINT. 





BEGIN TRANSACTION or START TRANSACTION: It initiates a new transaction, marking the beginning of a series of SQL statements that are treated as a single unit of work. 


  • COMMIT: It finalizes the transaction, making all changes permanent. Once a transaction is committed, the changes made by the SQL statements within it become part of the database.


  • ROLLBACK: It undoes all changes made during a transaction, reverting the database to its previous state. This is essential in cases of errors or unexpected behavior.


  • SAVEPOINT: It establishes a point within a transaction to which you can later roll back. It allows for partial rollbacks within a transaction.


Example:

Let's consider a simple banking application where the user wants to transfer funds between two accounts. To maintain the ACID properties, a transaction is used. 


BEGIN Transaction;


UPDATE Account SET Balance = Balance - 100 WHERE AccountID =123;

UPDATE Account SET Balance = Balance + 100 WHERE AccountID = 456;


COMMIT;


In this example, both updates are part of a single transaction, If the second update fails (e.g., due to an insufficient balance in Account 123), the entire transaction is rolled back, guaranteeing that the consistency of the database is maintained.

ACID Properties in DBMS

ACID is an acronym for the following properties that guarantee the reliability of a transaction:




Atomicity (A)

An indivisible transaction is atomic in nature. It's an all-or-nothing operation. Either all the changes made by the transaction are committed to the database, or none of them are. For instance, when transferring funds between two bank accounts, either the entire transaction succeeds, or no changes are made. Here, we have the two operations listed below Commit and Abort:


  • Commit: When a transaction commits, we can see the modifications that were done. Atomicity is hence also known as the “all or nothing rule.”


  • Abort: If a transaction is aborted, we are not able to see the modifications made to the database.


Take a look at transaction T, which is made up of T1 and T2: 1000 is being transferred from account A to account B.


Before : A = 5000

B = 2000

Transaction T

T1

T2

Read(A)

Read(B)

A = A - 1000

B = B + 1000

Write(A)

Write(B)

After : A = 4000

B = 3000



In case the transaction fails when the T1 is completed but the T2 is not completed (say, after write(A) but before write(B)), then the amount has been deducted from A but not added to B. 


This would result in a database state that is inconsistent. Therefore, to guarantee that the database state is accurate, the transaction must be completed in its entirety.

Consistency (C):

This feature makes sure that a transaction changes the database's consistency state. In other words, it maintains the integrity and validity of the data throughout the transaction. If, for example, a unique constraint is violated during a transaction, the database will roll back the entire transaction, maintaining consistency.

Here, T means Transaction.


Total after T occurs = 4000 + 3000 = 7000.


Total before T occurs = 5000 + 2000 = 7000.


Thus, the given database is consistent. In this case, there would be a discrepancy if T1 succeeded but T2 failed. Consequently, the T would stay unfinished.

Isolation (I):

By ensuring isolation, concurrent transactions are kept apart from one another. It provides a level of separation between transactions, making it appear as if they are running in isolation. This prevents issues like the "lost update" problem, where one transaction overwrites the changes made by another.

The isolation property guarantees that the state that is produced by concurrently executing the transactions is identical to the state that is obtained by serially executing the transactions in a specific order.


Let A = 5000, B = 5000

Here, let's look at two transactions:

 T and T.

T

T’’

Read(A)

Read(A)

A = A*10

Read(B)

Write(A)

Z = A + B

Read(B)

Write(Z)

B = B - 500


Write(B)




Assume that T has been run through Read(B) before T'' begins.


Consequently, there would be an interleaving of operations. As a result, T'' reads the right value for A but the wrong value for B. 


T’’: (X+B = 50,000+5000=55,000)


As a result, the amount calculated here and the amount received after the transaction are inconsistent:


T: (A+B = 50, 000 + 4500 = 5,4500) 


It results in the inconsistency of a database due to the loss of a total of 500 units. As a result, the transactions have to happen alone. Furthermore, the modifications can only be viewed upon their application to the primary memory.

Durability (D):

The durability property states that once the execution of a transaction is completed, the modifications and updates on the database get written to and stored on the disk. These continue even in the event of a system malfunction. These updates are saved in non-volatile memory and become permanent. Thus, the effects of this transaction are never lost.

Significance of ACID Properties in DBMS

All things considered, the ACID characteristics of transactions give DBMSs a way to guarantee the accuracy and consistency of any database. It guarantees consistency by treating each transaction as a collection of independent activities that work together to achieve consistent outcomes, function independently of one another, and make updates that are permanently preserved. These guarantee that the information in any given database is accurate.


Examples of Transaction Usage

A real-world example of SQL transaction management and ACID properties:


1. Money Transfer: When transferring money between two bank accounts, a transaction ensures that the withdrawal from one account and the deposit 

into another are atomic and consistent. If any part of the transaction fails, the money remains in its original state.


2. Inventory Management: Updating the inventory of a product when a customer places an order. A transaction ensures that the inventory is deducted accurately, and the order record is created consistently.


3. Booking Systems: In airline or hotel booking systems, when a customer books a ticket or a room, a transaction manages the simultaneous reservation and deducts available seats or rooms.


Transaction management and the ACID properties are fundamental to maintaining the integrity and consistency of data in SQL databases. 

When designing and developing database systems, understanding how transactions work and adhering to the ACID properties can provide the foundation for robust, dependable, and secure data management. Whether you're a database administrator, developer, or simply an enthusiast, a solid grasp of transaction management is essential in the world of SQL databases.