Transaction isolation levels control how and when changes made by one transaction become visible to others, balancing consistency against concurrency.

Control how concurrent transactions interact, from weakest (read uncommitted) to strongest (serializable). Higher isolation reduces anomalies (dirty reads, non-repeatable reads, phantom reads) but can reduce concurrency and performance.

Compatibility

Show:
Database System Support Status Since Version Notes
MySQL ✓ Supported 5.0 InnoDB supports all four standard levels: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE. Default is REPEATABLE READ, which is higher than most other engines. Uses MVCC; REPEATABLE READ prevents phantom reads for consistent reads but not for locking reads.
PostgreSQL ✓ Supported 7.4 Supports READ COMMITTED (default), REPEATABLE READ, and SERIALIZABLE. READ UNCOMMITTED is accepted as syntax but behaves as READ COMMITTED. PostgreSQL's SERIALIZABLE uses SSI (Serializable Snapshot Isolation), the strongest and most correct implementation.
SQL Server ✓ Supported 2000 Supports all four standard levels plus two snapshot-based levels: SNAPSHOT (statement-level MVCC) and READ_COMMITTED_SNAPSHOT (row versioning for default READ COMMITTED). RCSI is enabled at the database level and changes the default READ COMMITTED behavior engine-wide.
Oracle ✓ Supported 7 Supports READ COMMITTED (default) and SERIALIZABLE. READ UNCOMMITTED and REPEATABLE READ are not available — Oracle's MVCC architecture means dirty reads are structurally prevented. SERIALIZABLE uses snapshot isolation at transaction start.
SQLite ✓ Supported 3.0.0 SQLite supports DEFERRED, IMMEDIATE, and EXCLUSIVE transaction modes rather than the standard four ISO levels. WAL mode provides snapshot isolation for readers. Effectively READ COMMITTED or SERIALIZABLE depending on WAL mode and transaction type.

Details

The four ISO levels (READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE) are defined in the SQL standard but implemented very differently across engines. Oracle doesn't implement READ UNCOMMITTED or REPEATABLE READ at all — its MVCC architecture makes dirty reads impossible by design, and its SERIALIZABLE is actually snapshot isolation (which can still have write skew anomalies under the formal definition). PostgreSQL's SERIALIZABLE (SSI) is the most theoretically correct implementation among these five engines. MySQL's default REPEATABLE READ is stricter than most other engines default, which surprises developers coming from PostgreSQL (READ COMMITTED). SQL Server's READ_COMMITTED_SNAPSHOT changes the entire database's default isolation behavior when enabled — a setting that's often enabled silently by ORM frameworks during database creation. SQLite's transaction modes don't map cleanly to ISO levels; WAL mode is the key configuration that unlocks concurrent reads during a write transaction.

Standard Syntax

SET TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN; -- statements COMMIT;

Version Support

MySQL: Since 5.0 PostgreSQL: Since 7.4 SQL Server: Since 2000 Oracle: Since 7 SQLite: Since 3.0.0

Per-Database Syntax & Notes

MySQL

InnoDB supports all four standard levels: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE. Default is REPEATABLE READ, which is higher than most other engines. Uses MVCC; REPEATABLE READ prevents phantom reads for consistent reads but not for locking reads.

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SELECT @@transaction_isolation; -- check current level

PostgreSQL

Supports READ COMMITTED (default), REPEATABLE READ, and SERIALIZABLE. READ UNCOMMITTED is accepted as syntax but behaves as READ COMMITTED. PostgreSQL's SERIALIZABLE uses SSI (Serializable Snapshot Isolation), the strongest and most correct implementation.

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; -- statements COMMIT;

SQL Server

Supports all four standard levels plus two snapshot-based levels: SNAPSHOT (statement-level MVCC) and READ_COMMITTED_SNAPSHOT (row versioning for default READ COMMITTED). RCSI is enabled at the database level and changes the default READ COMMITTED behavior engine-wide.

SET TRANSACTION ISOLATION LEVEL SNAPSHOT; BEGIN TRAN; -- statements COMMIT; -- Or enable RCSI: ALTER DATABASE mydb SET READ_COMMITTED_SNAPSHOT ON;

Oracle

Supports READ COMMITTED (default) and SERIALIZABLE. READ UNCOMMITTED and REPEATABLE READ are not available — Oracle's MVCC architecture means dirty reads are structurally prevented. SERIALIZABLE uses snapshot isolation at transaction start.

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- Or at session level: ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;

SQLite

SQLite supports DEFERRED, IMMEDIATE, and EXCLUSIVE transaction modes rather than the standard four ISO levels. WAL mode provides snapshot isolation for readers. Effectively READ COMMITTED or SERIALIZABLE depending on WAL mode and transaction type.

BEGIN DEFERRED; -- default: read locks deferred BEGIN IMMEDIATE; -- write lock acquired immediately BEGIN EXCLUSIVE; -- exclusive lock, no other readers in non-WAL