• Sergei Golubchik's avatar
    MDEV-20354 All but last insert ignored in InnoDB tables when table locked · 5392b4a3
    Sergei Golubchik authored
    mysql_insert() first opens all affected tables (which implicitly
    starts a transaction in InnoDB), then stat tables.
    A failure to open a stat table caused open_tables() to abort
    the current stmt transaction (trans_rollback_stmt()). So, from the
    server point of view the following ha_write_row()-s happened outside
    of a transactions, and the server didn't bother to commit them.
    
    The server has a mechanism to prevent a transaction being
    unexpectedly committed or rolled back in the middle of a statement -
    if an operation takes place _in a sub-statement_ it cannot change
    the transaction state. Operations on stat tables are exactly that -
    they are not allowed to change a transaction state. Put them in
    a sub-statement to make sure they don't.
    5392b4a3
stat_tables.result 326 Bytes