Titre : Comment résoudre l'erreur MySQL : verrouiller le délai d'attente, essayer de redémarrer la transaction, nécessiter des exemples de code spécifiques
Texte :
MySQL est un système de gestion de bases de données relationnelles couramment utilisé et est largement utilisé dans divers types de bases de données .application. Cependant, lors de l'utilisation de MySQL, nous pouvons rencontrer diverses erreurs et exceptions. L'une des erreurs courantes est "Délai d'attente de verrouillage dépassé ; essayez de redémarrer la transaction". Cet article explique comment résoudre ce problème et fournit des exemples de code spécifiques.
2.1 Optimiser les instructions de requête
Dans MySQL, les instructions de requête sont l'une des opérations de base de données les plus couramment utilisées. . L'optimisation des instructions de requête peut réduire efficacement les problèmes de conflit de verrouillage. Vous pouvez essayer d'utiliser des index appropriés, réduire les opérations JOIN inutiles, réduire les analyses de table complètes et d'autres méthodes pour améliorer les performances des requêtes, réduisant ainsi le temps d'attente du verrouillage.
2.2 Limiter la durée des transactions
Des transactions plus longues augmenteront le temps de verrouillage des ressources, augmentant ainsi le temps d'attente des autres transactions pour les verrous. En limitant la durée des transactions et en divisant les transactions en unités d'opérations plus petites, les problèmes de conflits de verrouillage peuvent être réduits.
2.3 Améliorer le niveau d'isolation des transactions
MySQL prend en charge plusieurs niveaux d'isolation des transactions, tels que Lecture non validée, Lecture validée, Lecture répétable et Sérialisable. Différents niveaux d’isolement des transactions gèrent différemment la concurrence des verrous. Définir le niveau d'isolement des transactions à un niveau inférieur, tel que lecture non validée, peut réduire le temps d'attente du verrouillage.
2.4 Augmenter le délai d'attente du verrouillage
Dans MySQL, le délai d'attente du verrouillage par défaut est de 50 secondes. Si vous êtes dans un environnement à forte concurrence et que certaines opérations prennent beaucoup de temps, vous pouvez éviter l'erreur « Délai d'attente de verrouillage dépassé » en définissant le délai d'attente de verrouillage. Le délai d'attente du verrouillage peut être défini sur 100 secondes à l'aide de l'instruction SQL suivante :
SET innodb_lock_wait_timeout = 100;
try { // 建立数据库连接 Connection connection = DriverManager.getConnection(url, username, password); // 开启事务 connection.setAutoCommit(false); // 执行数据库操作 // ... // 提交事务 connection.commit(); } catch (SQLException e) { if (e.getErrorCode() == 1205) { // 锁等待超时错误码为1205 // 尝试重新启动事务 // ... } else { e.printStackTrace(); } }
Dans le code ci-dessus, nous capturons les exceptions SQL et portons des jugements basés sur les codes d'erreur. Si le code d'erreur est 1205, ce qui correspond à une erreur de délai d'attente de verrouillage, nous pouvons essayer de redémarrer la transaction.
Résumé :
Lors de l'utilisation de MySQL, vous pouvez rencontrer l'erreur « Délai d'attente de verrouillage dépassé ; essayez de redémarrer la transaction ». Afin de résoudre ce problème, nous pouvons réduire les problèmes de concurrence de verrouillage en optimisant les instructions de requête, en limitant la longueur des transactions, en améliorant le niveau d'isolation des transactions et en augmentant le délai d'attente du verrouillage. Nous fournissons également un exemple de code Java qui montre comment gérer cette erreur.
J'espère que cet article vous aidera à résoudre le problème du délai d'attente de verrouillage dans MySQL !
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!