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 | RU | RC | RR | SI | SER |
|---|---|---|---|---|---|
| PostgreSQL 16postgres-16 | anomalywrite-skewalias → RC | anomalywrite-skew | anomalywrite-skew | no such level | aborted T240001 |
| MySQL InnoDB 8.4mysql-8-innodb | anomalywrite-skew | anomalywrite-skew | anomalywrite-skew | no such level | aborted T21213 |
| Microsoft SQL Server 2022sqlserver-2022 | anomalywrite-skew | anomalywrite-skew | no such level | anomalywrite-skew | no such level |
| Microsoft SQL Server 2022sqlserver-2022-rcsi | anomalywrite-skew | anomalywrite-skew | no such level | anomalywrite-skew | no such level |
| Oracle Database 23ai Freeoracle-23ai | no such level | anomalywrite-skew | no such level | no such level | anomalywrite-skew |
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 UNCOMMITTEDalias → READ COMMITTEDpostgres-16
- PostgreSQL 16 READ COMMITTEDpostgres-16
Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 3
- Microsoft SQL Server 2022 READ COMMITTEDsqlserver-2022-rcsi
- Oracle Database 23ai Free READ COMMITTEDoracle-23ai
Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 2
- Microsoft SQL Server 2022 READ UNCOMMITTEDsqlserver-2022
- Microsoft SQL Server 2022 READ UNCOMMITTEDsqlserver-2022-rcsi
Permits somewhere in the library: Dirty read, Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 2
- Microsoft SQL Server 2022 REPEATABLE READsqlserver-2022
- Microsoft SQL Server 2022 REPEATABLE READsqlserver-2022-rcsi
Permits somewhere in the library: Phantom read, Write skewaborts a transaction in 2
- Microsoft SQL Server 2022 SERIALIZABLEsqlserver-2022
- Microsoft SQL Server 2022 SERIALIZABLEsqlserver-2022-rcsi
Permits somewhere in the library: no anomaly in any scheduleaborts a transaction in 2
- Microsoft SQL Server 2022 SNAPSHOTsqlserver-2022
- Microsoft SQL Server 2022 SNAPSHOTsqlserver-2022-rcsi
Permits somewhere in the library: Write skewaborts a transaction in 5
- MySQL InnoDB 8.4 READ COMMITTEDmysql-8-innodb
Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 3
- MySQL InnoDB 8.4 READ UNCOMMITTEDmysql-8-innodb
Permits somewhere in the library: Dirty read, Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts a transaction in 3
- MySQL InnoDB 8.4 REPEATABLE READmysql-8-innodb
Permits somewhere in the library: Lost update, Write skewaborts a transaction in 3
- MySQL InnoDB 8.4 SERIALIZABLEmysql-8-innodb
Permits somewhere in the library: no anomaly in any scheduleaborts a transaction in 6
- Oracle Database 23ai Free SERIALIZABLEoracle-23ai
Permits somewhere in the library: Write skewaborts a transaction in 2
- PostgreSQL 16 REPEATABLE READpostgres-16
Permits somewhere in the library: Write skewaborts a transaction in 6
- PostgreSQL 16 SERIALIZABLEpostgres-16
Permits somewhere in the library: no anomaly in any scheduleaborts a transaction in 8
- Microsoft SQL Server 2022 READ COMMITTEDsqlserver-2022
Permits somewhere in the library: Lost update, Non-repeatable read, Phantom read, Read skew, Write skewaborts 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