Skip to content

Instantly share code, notes, and snippets.

@rbranson
Last active January 16, 2019 16:40
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save rbranson/007f989da12ba912ae7ec5859d4d732a to your computer and use it in GitHub Desktop.
MySQL re-orders commits
Schema
==========================================
CREATE TABLE locks (
name VARCHAR(191) PRIMARY KEY,
clock BIGINT
);
CREATE TABLE ledger (
seq BIGINT AUTO_INCREMENT PRIMARY KEY,
entry MEDIUMTEXT
);
Session A | Session B
========================================================|====================================================
BEGIN | BEGIN
UPDATE locks SET clock=clock+1 WHERE name='ledger' |
| UPDATE locks SET clock=clock+1 WHERE name='ledger'
INSERT INTO ledger (entry) VALUES('a') |
INSERT INTO ledger (entry) VALUES('b') |
INSERT INTO ledger (entry) VALUES('c') |
INSERT INTO ledger (entry) VALUES('d') |
COMMIT |
| INSERT INTO ledger (entry) VALUES('e')
| COMMIT
=============================================================================================================
Clients briefly see rows inserted by Session B before Session A:
SELECT * FROM ledger WHERE seq > 0
---------------------
| seq | entry |
---------------------
| 5 | e |
---------------------
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment