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

Filter by Database
SQL ISOLATION LEVELS Compatibility Across Databases
Database System Support Status Since Version Notes
MySQL Native 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 Native 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 Native 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 Native 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 Native 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: Native since 5.0 PostgreSQL: Native since 7.4 SQL Server: Native since 2000 Oracle: Native since 7 SQLite: Native since 3.0.0

Per-Database Syntax & Notes

MySQL Native syntax

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 Native syntax

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 Native syntax

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 Native syntax

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 Native syntax

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