Dokumentasi PHP menyerlahkan faedah transaksi, menekankan keupayaan mereka untuk memastikan operasi atom, konsisten, terpencil dan tahan lama dalam pangkalan data .
Soalan:
Adakah ini membayangkan bahawa skrip PHP berasingan yang menjalankan urus niaga secara serentak boleh beroperasi tanpa gangguan?
Penerangan tentang Gangguan:
Pertimbangkan pekerja jadual dengan data berikut:
id | name | salary |
---|---|---|
1 | ana | 10000 |
Dua skrip dengan kod serupa dilaksanakan serentak:
skrip1.php dan skrip2.php:
<code class="php">$conn->beginTransaction(); $stmt = $conn->prepare("SELECT * FROM employees WHERE name = ?"); $stmt->execute(['ana']); $row = $stmt->fetch(PDO::FETCH_ASSOC); $salary = $row['salary']; $salary = $salary + 1000;//increasing salary $stmt = $conn->prepare("UPDATE employees SET salary = {$salary} WHERE name = ?"); $stmt->execute(['ana']); $conn->commit();</code>
Timbul persoalan berkenaan dengan hasil gaji 'ana' di bawah senario pelaksanaan yang berbeza.
Jawapan:
Hasilnya bergantung pada tahap pengasingan dikonfigurasikan untuk enjin jadual InnoDB dalam MySQL. Empat tahap pengasingan wujud mengikut piawaian SQL:
Dalam senario yang diberikan, menggunakan tahap pengasingan BERSERIALIZE dan melumpuhkan autokomit akan menghasilkan gaji sebanyak 12000 kerana setiap transaksi diasingkan dan dilaksanakan secara berurutan.
Walau bagaimanapun, dengan mana-mana tahap pengasingan lain atau BOLEH BERSIRI dengan autokomit didayakan , hasilnya akan menjadi 11000. Ini kerana urus niaga boleh bertindih dalam kes ini, membenarkan kemungkinan gangguan. Menggunakan bacaan mengunci juga boleh menjejaskan keputusan, yang berpotensi membawa kepada gaji 12000 di bawah semua peringkat pengasingan.
Oleh itu, tahap pengasingan khusus dan tetapan konfigurasi yang digunakan akan menentukan gangguan atau kekurangannya antara transaksi serentak dalam skrip PHP .
Atas ialah kandungan terperinci Bolehkah Transaksi PHP Serentak dalam PDO MySQL Mengganggu Satu sama lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!