Vous devez mettre les deux connexions au niveau d'isolement des transactions sérialisables afin d'éviter le scénario que vous décrivez, soit en définissant le tx_isolation
à chaque connexion avec :
SET @@tx_isolation = SERIALIZABLE;
ou
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
ou en définissant le niveau d'isolement global avec :
SET @@global.tx_isolation = SERIALIZABLE;
ou
SET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;
qui est héritée par toute connexion ouverte par la suite. À ce niveau, les transactions bloqueront toutes les requêtes si une autre transaction est déjà en cours, c'est-à-dire. une transaction a déjà émis une requête (lecture ou écriture) sur les mêmes tables.
Voir la documentation mysql pour plus de détails.