Transaction Support in SQL
In this
section, we give a brief introduction to transaction support in SQL. There are
many more details, and the newer standards have more commands for transaction
processing. The basic definition of an SQL transaction is similar to our
already defined concept of a transaction. That is, it is a logical unit of work
and is guaran-teed to be atomic. A single SQL statement is always considered to
be atomic—either it completes execution without an error or it fails and leaves
the database unchanged.
With SQL,
there is no explicit Begin_Transaction
statement. Transaction initiation is done implicitly when particular SQL
statements are encountered. However, every transaction must have an explicit
end statement, which is either a COMMIT or a ROLLBACK. Every transaction has certain
characteristics attributed to it. These
characteristics
are specified by a SET TRANSACTION
statement in SQL. The charac-teristics are the access mode, the diagnostic
area size, and the isolation level.
The access mode can be specified as READ ONLY or READ WRITE. The default is READ WRITE, unless the isolation level of READ UNCOMMITTED is specified (see below), in which case READ ONLY is assumed. A mode of READ WRITE allows select, update, insert,
delete, and create commands to be executed. A mode of READ ONLY, as the name implies, is simply
for data retrieval.
The diagnostic area size option, DIAGNOSTIC SIZE n, specifies an integer value n,
which indicates the number of conditions that can be held simultaneously in the
diagnostic area. These conditions supply feedback information (errors or
excep-tions) to the user or program on the n
most recently executed SQL statement.
The isolation level option is specified
using the statement
<isolation>, where the value for <isolation> can be READ UNCOMMITTED, READ COMMITTED,
REPEATABLE READ, or
SERIALIZABLE.15 The
default isolation level is
SERIALIZABLE, although some systems use READ COMMITTED as their default. The use of the term SERIALIZABLE here is based on not allowing
violations that cause dirty read, unrepeatable read, and phantoms,16
and it is thus not identical to the way serializability was defined earlier in
Section 21.5. If a transaction executes at a lower isolation level than SERIALIZABLE, then one or more of the
following three viola-tions may occur:
Dirty read. A transaction T1 may read the update of a transaction T2,
which has not yet committed. If T2 fails and is aborted, then
T1 would have read a value
that does not exist and is incorrect.
Nonrepeatable
read. A transaction T1 may read a given value from a table. If another transaction T2
later updates that value and T1
reads that value again, T1 will see a different value.
Phantoms.
A
transaction T1 may read a
set of rows from a table, perhaps based
on some condition specified in the SQL WHERE-clause.
Now suppose that a transaction T2
inserts a new row that also satisfies the WHERE-clause
condition used in T1, into
the table used by T1. If T1 is repeated, then T1 will see a phantom, a row
that previously did not exist.
Table
21.1 summarizes the possible violations for the different isolation levels. An
entry of Yes indicates that a
violation is possible and an entry of No
indicates that it is not possible. READ
UNCOMMITTED is the most forgiving, and SERIALIZABLE is the
most restrictive in that it avoids all three of the problems mentioned above.
A sample
SQL transaction might look like the following:
EXEC
SQL WHENEVER SQLERROR GOTO UNDO;
EXEC
SQL SET TRANSACTION
READ
WRITE
DIAGNOSTIC
SIZE 5
ISOLATION
LEVEL SERIALIZABLE;
EXEC
SQL INSERT INTO EMPLOYEE (Fname, Lname, Ssn, Dno, Salary) VALUES ('Robert', 'Smith',
'991004321', 2, 35000);
EXEC
SQL UPDATE EMPLOYEE
SET
Salary = Salary * 1.1 WHERE Dno = 2;
EXEC
SQL COMMIT;
GOTO
THE_END;
UNDO:
EXEC SQL ROLLBACK; THE_END: ... ;
The above
transaction consists of first inserting a new row in the EMPLOYEE table and then updating the
salary of all employees who work in department 2. If an error occurs on any of
the SQL statements, the entire transaction is rolled back. This implies that
any updated salary (by this transaction) would be restored to its previ-ous value
and that the newly inserted row would be removed.
As we
have seen, SQL provides a number of transaction-oriented features. The DBA or
database programmers can take advantage of these options to try improving
Table 21.1 Possible Violations Based on Isolation Levels as
Defined in SQL
transaction performance by relaxing serializability if that is
acceptable for their applications.
Related Topics
Privacy Policy, Terms and Conditions, DMCA Policy and Compliant
Copyright © 2018-2023 BrainKart.com; All Rights Reserved. Developed by Therithal info, Chennai.