Abyste se vyhnuli scénáři, který popisujete, musíte obě připojení umístit na serializovatelnou úroveň izolace transakcí, a to buď nastavením tx_isolation
při každém připojení pomocí:
SET @@tx_isolation = SERIALIZABLE;
nebo
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
nebo nastavením úrovně globální izolace pomocí:
SET @@global.tx_isolation = SERIALIZABLE;
nebo
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
který je zděděn každým následně otevřeným spojením. Na této úrovni se transakce zablokují na jakékoli dotazy, pokud již probíhá jiná transakce, tzn. transakce již vyvolala dotaz (čtení nebo zápis) na stejné tabulky.
Viz dokumentaci mysql pro další podrobnosti.