Tahap 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.
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:
-- 执行事务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;
Dalam 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;
Dalam 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;
Dalam 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;
Dalam 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!