


Hubungan antara kunci MySQL, tahap pengasingan transaksi dan aplikasi
Dec 21, 2023 am 08:27 AMTahap pengasingan transaksi kunci MySQL dan aplikasi
Dalam pangkalan data, tahap pengasingan transaksi merupakan konsep yang sangat penting, yang menentukan tahap pengasingan antara transaksi serentak. MySQL menyediakan empat tahap pengasingan transaksi: BACA TIDAK KOMITED, BACA KOMITED, BACA DIULANG dan BOLEH BERSIRI. Tahap pengasingan transaksi yang berbeza mempunyai strategi penguncian yang berbeza untuk membaca dan menulis data, jadi adalah penting untuk memilih dan menggunakan tahap pengasingan transaksi yang sesuai dalam aplikasi anda dengan betul.
- BACA TIDAK KOMITED: Pada tahap ini, urus niaga boleh membaca data tidak komited daripada transaksi lain. Ini bermakna bahawa bacaan kotor mungkin berlaku, iaitu, data yang tidak disahkan dibaca. Tahap ini biasanya tidak disyorkan melainkan anda perlu mendapatkan data masa nyata dalam keadaan khas.
- MEMBACA KOMITED: Pada tahap ini, urus niaga hanya boleh membaca data yang diserahkan. Ini mengelakkan masalah bacaan kotor, tetapi boleh menyebabkan masalah bacaan tidak berulang. Bacaan tidak boleh berulang merujuk kepada membaca data yang sama dua kali dalam transaksi yang sama, tetapi hasilnya tidak konsisten. Ini kerana transaksi lain mungkin telah mengemas kini data semasa pelaksanaan transaksi.
- BACAAN BOLEH DIULANG: Pada tahap ini, transaksi boleh membaca data yang sama beberapa kali dengan hasil yang konsisten. Ini dicapai dengan mengunci data semasa proses membaca. Pada tahap BACA BOLEH DIULANG, operasi baca akan berkongsi kunci pada baris data yang memenuhi syarat, supaya transaksi lain hanya boleh membaca data tetapi tidak boleh mengubah suai data. Walau bagaimanapun, masalah membaca hantu mungkin masih berlaku. Bacaan hantu merujuk kepada membaca data dalam julat dua kali dalam transaksi yang sama, tetapi hasilnya tidak konsisten. Ini kerana semasa pelaksanaan transaksi, transaksi lain mungkin telah memasukkan atau memadam data yang memenuhi syarat.
- BOLEH BERSIRI: Pada tahap ini, urus niaga dilaksanakan secara bersiri. Ini bermakna hanya satu transaksi boleh mengubah suai data pada masa yang sama, dan transaksi lain sedang menunggu kunci dilepaskan. Tahap ini boleh mengelakkan sepenuhnya masalah bacaan kotor, bacaan tidak berulang dan bacaan hantu, tetapi ia juga mempunyai kesan yang besar pada prestasi serentak kerana anda perlu menunggu urus niaga lain melepaskan kunci.
Yang berikut menggunakan contoh kod khusus untuk menunjukkan strategi penguncian di bawah tahap pengasingan transaksi yang berbeza:
Mula-mula buat jadual ujian:
CREATE TABLE test_table ( id INT PRIMARY KEY, name VARCHAR(100), age INT );
Kemudian kami menunjukkan strategi penguncian di bawah tahap pengasingan transaksi yang berbeza:
- TANPA KOMITED
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
Salin selepas log masukDalam contoh ini, transaksi 1 membaca data yang diubah suai tetapi tidak dilakukan oleh transaksi 2.
READ COMMITTED:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL READ COMMITTED; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
Salin selepas log masukDalam contoh ini, transaksi 1 hanya boleh membaca data yang transaksi 2 telah diserahkan.
BACA DIULANG:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
Salin selepas log masukDalam contoh ini, transaksi 1 menambah kunci kongsi semasa membaca data, dan transaksi 2 menunggu transaksi 1 melepaskan kunci kongsi sebelum ia boleh dilaksanakan.
SERIALIZABLE:
-- 执行事务1 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; START TRANSACTION; SELECT * FROM test_table WHERE id = 1; -- 执行事务2 START TRANSACTION; UPDATE test_table SET age = 20 WHERE id = 1; COMMIT; -- 继续执行事务1 SELECT * FROM test_table WHERE id = 1; COMMIT;
Salin selepas log masukDalam contoh ini, transaksi 1 menambah kunci kongsi semasa membaca data, dan transaksi 2 menunggu transaksi 1 untuk melepaskan kunci kongsi sebelum ia boleh dilaksanakan.
Melalui contoh kod di atas, kita dapat melihat cara strategi kunci berfungsi di bawah tahap pengasingan transaksi yang berbeza. Dalam pembangunan aplikasi sebenar, adalah sangat perlu untuk memilih tahap pengasingan transaksi yang sesuai, yang boleh dipilih mengikut senario perniagaan tertentu dan keperluan prestasi.
Atas ialah kandungan terperinci Hubungan antara kunci MySQL, tahap pengasingan transaksi dan aplikasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Peranan dan aplikasi praktikal simbol anak panah dalam PHP

Bagaimana untuk membuat asal Padam dari Skrin Utama dalam iPhone

Daripada pemula hingga mahir: Terokai pelbagai senario aplikasi arahan tee Linux

Terokai kelebihan dan senario aplikasi bahasa Go

Aplikasi luas Linux dalam bidang pengkomputeran awan

Memahami mekanisme dan aplikasi pengurusan tindanan Golang

Memahami cap masa MySQL: fungsi, ciri dan senario aplikasi

Tutorial Apple tentang cara menutup aplikasi yang sedang berjalan
