Controlling Locking Behavior With the SET_ISOLATION_LEVEL Command

SET_ISOLATION_LEVEL controls the locking and row versioning behavior of SQL statements issued by a connection.

Syntax

SET_ISOLATION_LEVEL OF <server> TO DEFAULT|READ_COMMITTED|READ_UNCOMMITTED|
REPEATABLE_READ|SERIALIZABLE|SNAPSHOT_LEVEL

Where

<server> : is the server name

DEFAULT:
is the default isolation level value set by the driver during the initializarion
SQLFlex: READ UNCOMMITTED
MySQLFlex: the default TRANSACTION ISOLATION LEVEL defined by the database

READ_COMMITTED: Specifies that statements cannot read data that has been modified but not committed by other transactions. This prevents dirty reads. Data can be changed by other transactions between individual statements within the current transaction, resulting in nonrepeatable reads or phantom data.

READ_UNCOMMITTED: Specifies that statements can read rows that have been modified by other transactions but not yet committed.

REPEATABLE_READ: Specifies that statements cannot read data that has been modified but not yet committed by other transactions and that no other transactions can modify data that has been read by the current transaction until the current transaction completes.

SERIALIZABLE: Specifies the following:

  • Statements cannot read data that has been modified but not yet committed by other transactions.
  • No other transactions can modify data that has been read by the current transaction until the current transaction completes.
  • Other transactions cannot insert new rows with key values that would fall in the range of keys read by any statements in the current transaction until the current transaction completes.

SNAPSHOT_LEVEL: Specifies that data read by any statement in a transaction will be the transactionally consistent version of the data that existed at the start of the transaction. The transaction can only recognize data modifications that were committed before the start of the transaction. Data modifications made by other transactions after the start of the current transaction are not visible to statements executing in the current transaction. The effect is
as if the statements in a transaction get a snapshot of the committed data as it existed at the start of the transaction.

Tags:

Leave a Reply