The same schedule, every engine, every level
Committed, aborted with which error, or completed with an anomaly. The disagreement between engines is the lesson.
Documents: Write skew — Two doctors are on call and at least one must remain. Each opens the roster, sees that the other is on call, and takes themselves off. Both commit.
Updated: The on-call roster empties
| Engine | RUREAD UNCOMMITTED | RCREAD COMMITTED | RRREPEATABLE READ | SISNAPSHOT | SERSERIALIZABLE |
|---|---|---|---|---|---|
| PostgreSQL 16postgres-16 | Write skew→ RC | Write skew | Write skew | no such level | aborted T240001 |
| MySQL InnoDB 8.4mysql-8-innodb | Write skew | Write skew | Write skew | no such level | aborted T21213 |
| SQL Server 2022sqlserver-2022 | Write skew | Write skew | refused · deadlock victim not modelled | Write skew | refused · deadlock victim not modelled |
| SQL Server 2022 · RCSIsqlserver-2022-rcsi | Write skew | Write skew | refused · deadlock victim not modelled | Write skew | refused · deadlock victim not modelled |
| Oracle 23aioracle-23ai | no such level | Write skew | no such level | no such level | Write skew |
- Oracle 23ai at SERIALIZABLE permits Write skew in this schedule. The name promises serializability; the pack documents this level as SERIALIZABLE (Snapshot Isolation).
Which level names cannot be told apart
Every level of every engine here, run against all 11 schedules in the library and grouped by what the application saw: the value each statement returned, where it waited, which transactions committed, and the table left behind. Only the error codes are ignored — 40001 and ORA-08177 are the same event in two dialects.
This is evidence over 11 schedules, not a proof of equivalence. Two levels in the same group agreed on every one of them; a twelfth schedule could still tell them apart. Read each group as “nothing here distinguishes these”, never as “these are the same level”.
- PostgreSQL 16 READ UNCOMMITTED→ READ COMMITTED
- PostgreSQL 16 READ COMMITTED
Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skew· aborts a transaction in 3
- Microsoft SQL Server 2022 READ COMMITTED
- Oracle Database 23ai Free READ COMMITTED
Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skew· aborts a transaction in 2
- Microsoft SQL Server 2022 READ UNCOMMITTED
- Microsoft SQL Server 2022 READ UNCOMMITTED
Permits somewhere in the library: Dirty read, Lost update, Non-repeatable read, Phantom read, Read skew, Write skew· aborts a transaction in 2
- Microsoft SQL Server 2022 REPEATABLE READ
- Microsoft SQL Server 2022 REPEATABLE READ
Permits somewhere in the library: Phantom read, Write skew· aborts a transaction in 2
- Microsoft SQL Server 2022 SERIALIZABLE
- Microsoft SQL Server 2022 SERIALIZABLE
Permits somewhere in the library: no anomaly in any schedule· aborts a transaction in 2
- Microsoft SQL Server 2022 SNAPSHOT
- Microsoft SQL Server 2022 SNAPSHOT
Permits somewhere in the library: Write skew· aborts a transaction in 5
- MySQL InnoDB 8.4 READ COMMITTED
Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skew· aborts a transaction in 3
- MySQL InnoDB 8.4 READ UNCOMMITTED
Permits somewhere in the library: Dirty read, Lost update, Non-repeatable read, Phantom read, Read skew, Write skew· aborts a transaction in 3
- MySQL InnoDB 8.4 REPEATABLE READ
Permits somewhere in the library: Lost update, Write skew· aborts a transaction in 3
- MySQL InnoDB 8.4 SERIALIZABLE
Permits somewhere in the library: no anomaly in any schedule· aborts a transaction in 6
- Oracle Database 23ai Free SERIALIZABLE
Permits somewhere in the library: Write skew· aborts a transaction in 2
- PostgreSQL 16 REPEATABLE READ
Permits somewhere in the library: Write skew· aborts a transaction in 6
- PostgreSQL 16 SERIALIZABLE
Permits somewhere in the library: no anomaly in any schedule· aborts a transaction in 8
- Microsoft SQL Server 2022 READ COMMITTED
Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skew· aborts a transaction in 2
Names these engines do not implement at all
- PostgreSQL 16 SNAPSHOT
- MySQL InnoDB 8.4 SNAPSHOT
- Oracle Database 23ai Free READ UNCOMMITTED
- Oracle Database 23ai Free REPEATABLE READ
- Oracle Database 23ai Free SNAPSHOT