Rumah >pangkalan data >tutorial mysql >Cara menggunakan tahap pengasingan transaksi MySQL untuk menangani isu transaksi serentak

Cara menggunakan tahap pengasingan transaksi MySQL untuk menangani isu transaksi serentak

WBOY
WBOYasal
2023-08-02 18:07:481387semak imbas

Cara menggunakan tahap pengasingan transaksi MySQL untuk mengendalikan isu transaksi serentak

  1. Pengenalan

Apabila menggunakan MySQL untuk pemprosesan transaksi serentak, anda mungkin menghadapi beberapa masalah, seperti ketidakkonsistenan data, bacaan kotor, bacaan hantu, dsb. Untuk menyelesaikan masalah ini, MySQL menyediakan fungsi tahap pengasingan transaksi, yang boleh mengendalikan transaksi serentak dengan menetapkan tahap pengasingan yang berbeza.

Dalam artikel ini, kami akan memperkenalkan empat tahap pengasingan transaksi MySQL dan menunjukkan melalui kod sampel cara menggunakan tahap pengasingan ini untuk mengendalikan isu transaksi serentak.

  1. Tahap pengasingan transaksi MySQL

Empat tahap pengasingan transaksi MySQL ialah: Baca Tidak Komited, Baca Komited, Bacaan Boleh Ulang dan Boleh Bersiri ).

  • Baca tanpa komitmen: Tahap pengasingan terendah, urus niaga boleh membaca data tanpa komitmen, yang boleh menyebabkan masalah bacaan kotor.
  • Read Commited: Transaksi hanya boleh membaca data yang diserahkan, mengelakkan masalah bacaan kotor, tetapi masalah bacaan yang tidak boleh berulang mungkin berlaku.
  • Bacaan berulang: Pastikan hasil bacaan berbilang data yang sama dalam transaksi yang sama adalah konsisten, mengelakkan masalah bacaan tidak berulang, tetapi masalah bacaan hantu mungkin berlaku.
  • Serialization: Tahap pengasingan tertinggi, urus niaga akan dilaksanakan sepenuhnya secara bersiri, mengelakkan masalah bacaan hantu, tetapi ia akan membawa kepada penurunan prestasi serentak.
  1. Contoh penggunaan tahap pengasingan transaksi

Di bawah kami menggunakan kod sampel untuk menunjukkan cara menggunakan tahap pengasingan transaksi MySQL untuk mengendalikan isu transaksi serentak.

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()

Dalam kod contoh di atas, kami mula-mula mencipta sambungan MySQL dan menetapkan tahap pengasingan transaksi untuk membaca komited. Kemudian, kami memulakan transaksi dan melaksanakan dua penyata SQL, menolak 100 daripada baki pengguna 1 dan menambah 100 pada baki pengguna 2. Akhir sekali, keputusan pelaksanaan transaksi diproses dengan melakukan transaksi atau melancarkan transaksi.

  1. Ringkasan

Dalam artikel ini, kami memperkenalkan empat tahap pengasingan transaksi MySQL dan menunjukkan melalui kod sampel cara menggunakan tahap pengasingan ini untuk mengendalikan isu transaksi serentak. Saya harap artikel ini akan membantu anda memahami tahap pengasingan transaksi MySQL dan menangani isu transaksi serentak.

Atas ialah kandungan terperinci Cara menggunakan tahap pengasingan transaksi MySQL untuk menangani isu transaksi serentak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn