InnoDB использует
облегчённый MVCC.
InnoDB adds three fields to each row stored in the database. A 6-byte DB_TRX_ID field indicates the transaction identifier for the last transaction that inserted or updated the row. Also, a deletion is treated internally as an update where a special bit in the row is set to mark it as deleted.
Each row also contains a 7-byte DB_ROLL_PTR field called the roll pointer. The roll pointer points to an undo log record written to the rollback segment. If the row was updated the undo log record contains the information necessary to rebuild the content of the row before it was updated.
A 6-byte DB_ROW_ID field contains a row ID that increases monotonically as new rows are inserted. If InnoDB generates a clustered index automatically, the index contains row ID values. Otherwise, the DB_ROW_ID column does not appear in any index.
В общем тут нужно понимать что если транзакции в одной таблице обрабатываются одним потоком и сортируются по DB_TRX_ID, то в принципе при возникновении подобной исключительной ситуации одна из транзакций просто провалиться, а другая применится. Ситуация когда одно поле обрабатывается двумя потоками в InnoDB просто невозможна, так как для любого поля есть счётчик оптимистических блокировок.