Maison >base de données >tutoriel mysql >Comment exécuter des instructions SELECT dans MySQL sans verrouillage ?
Comment exécuter des instructions SELECT sans provoquer de verrous dans MySQL
Dans MySQL, l'exécution d'instructions SELECT peut parfois déclencher des verrous, en particulier lorsque la table sous-jacente subit des modifications concomitantes. Cela peut être problématique, en particulier sur les bases de données esclaves qui reposent sur le binlogging.
Une solution potentielle, suggérée dans l'article fourni, consiste à utiliser le modificateur "NOLOCK". Cependant, MySQL ne prend pas en charge un mot-clé équivalent. Au lieu de cela, vous pouvez obtenir le même effet en ajustant le niveau d'isolement des transactions.
Solution : lire le niveau d'isolement des transactions non validées
Pour éviter les verrous lors de l'exécution des instructions SELECT, vous pouvez définissez le niveau d'isolement des transactions sur "READ UNCOMMITTED". Cela permet aux transactions non validées d'être visibles, empêchant ainsi les verrous de se produire. Voici comment procéder :
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
Compatibilité des bases de données esclaves
Lors de l'utilisation du niveau d'isolement READ UNCOMMITTED sur une base de données esclave, vous pouvez rencontrer l'erreur : "Binaire journalisation impossible... Le niveau de transaction 'READ-UNCOMMITTED' dans InnoDB n'est pas sûr pour le mode binlog 'STATEMENT.'" Pour résoudre Ceci, vous pouvez modifier le fichier my.cnf sur la base de données principale pour activer le niveau d'isolement des transactions « READ UNCOMMITTED » pour le binlogging.
Solution alternative
Alternativement, vous peut utiliser la technique suivante au lieu de définir le niveau d'isolement :
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; SELECT COUNT(online.account_id) cnt from online; COMMIT;
Cela force la requête à lire les données non validées, puis à les valider immédiatement la transaction, évitant ainsi tout verrouillage ou conflit potentiel.
Notez que l'utilisation du niveau d'isolement READ UNCOMMITTED permet d'accéder aux données non validées, ce qui peut entraîner des incohérences de données. Il est important de considérer les risques potentiels et de l'utiliser avec prudence si nécessaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!