Maison  >  Article  >  base de données  >  Comment utiliser le niveau d'isolation des transactions de MySQL pour gérer les problèmes de transactions simultanées

Comment utiliser le niveau d'isolation des transactions de MySQL pour gérer les problèmes de transactions simultanées

WBOY
WBOYoriginal
2023-08-02 18:07:481332parcourir

Comment utiliser le niveau d'isolation des transactions de MySQL pour gérer les problèmes de transactions simultanées

  1. Introduction

Lorsque vous utilisez MySQL pour le traitement de transactions simultanées, vous pouvez rencontrer certains problèmes, tels qu'une incohérence des données, des lectures sales, des lectures fantômes, etc. Afin de résoudre ces problèmes, MySQL fournit la fonction de niveau d'isolation des transactions, qui peut gérer les transactions simultanées en définissant différents niveaux d'isolation.

Dans cet article, nous présenterons les quatre niveaux d'isolation des transactions de MySQL et démontrerons, à l'aide d'un exemple de code, comment utiliser ces niveaux d'isolation pour gérer les problèmes de transactions simultanées.

  1. Niveaux d'isolation des transactions de MySQL

Les quatre niveaux d'isolation des transactions de MySQL sont : Lecture non validée, Lecture validée, Lecture répétable et Sérialisable).

  • Lecture non validée : niveau d'isolement le plus bas, les transactions peuvent lire des données non validées, ce qui peut entraîner des problèmes de lecture incorrecte.
  • Lecture validée : les transactions ne peuvent lire que les données soumises, évitant ainsi les problèmes de lecture incorrecte, mais des problèmes de lecture non reproductibles peuvent survenir.
  • Lecture répétable : assurez-vous que les résultats de plusieurs lectures des mêmes données dans la même transaction sont cohérents, évitant ainsi le problème de lecture non répétable, mais des problèmes de lecture fantôme peuvent survenir.
  • Sérialisation : niveau d'isolement le plus élevé, les transactions seront exécutées entièrement en série, évitant ainsi les problèmes de lecture fantôme, mais cela entraînera une réduction des performances de concurrence.
  1. Exemple d'utilisation du niveau d'isolation des transactions

Ci-dessous, nous utilisons un exemple de code pour montrer comment utiliser le niveau d'isolation des transactions de MySQL pour gérer les problèmes de transactions simultanées.

import pymysql

# 连接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='密码', db='test')

# 创建游标
cursor = conn.cursor()

# 设置事务隔离级别为读已提交
cursor.execute('SET TRANSACTION ISOLATION LEVEL READ COMMITTED')

# 开始事务
cursor.execute('START TRANSACTION')

try:
    # 执行SQL语句
    cursor.execute('UPDATE users SET balance = balance - 100 WHERE id = 1')
    cursor.execute('UPDATE users SET balance = balance + 100 WHERE id = 2')

    # 提交事务
    conn.commit()
except Exception as e:
    # 回滚事务
    conn.rollback()
    print('事务执行失败:', str(e))

# 关闭游标和连接
cursor.close()
conn.close()

Dans l'exemple de code ci-dessus, nous avons d'abord créé une connexion MySQL et défini le niveau d'isolation des transactions sur lecture validée. Ensuite, nous avons démarré une transaction et exécuté deux instructions SQL, en soustrayant 100 du solde de l'utilisateur 1 et en ajoutant 100 au solde de l'utilisateur 2. Enfin, les résultats de l'exécution de la transaction sont traités en validant la transaction ou en annulant la transaction.

  1. Résumé

Dans cet article, nous avons présenté les quatre niveaux d'isolation des transactions de MySQL et démontré, à l'aide d'un exemple de code, comment utiliser ces niveaux d'isolation pour gérer les problèmes de transactions simultanées. J'espère que cet article vous aidera à comprendre le niveau d'isolation des transactions de MySQL et à résoudre les problèmes de transactions simultanées.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn