Musisz umieścić oba połączenia na poziomie izolacji transakcji, którą można serializować, aby uniknąć opisanego scenariusza, albo ustawiając tx_isolation
na każdym połączeniu z:
SET @@tx_isolation = SERIALIZABLE;
lub
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
lub ustawiając globalny poziom izolacji za pomocą:
SET @@global.tx_isolation = SERIALIZABLE;
lub
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
który jest dziedziczony przez każde później otwarte połączenie. Na tym poziomie transakcje będą blokować się na wszelkie zapytania, jeśli inna transakcja jest już w toku, tj. transakcja już wyemitowała zapytanie (odczyt lub zapis) w tych samych tabelach.
Zobacz dokumentację mysql aby uzyskać więcej informacji.