Dalam pangkalan data MySQL, keadaan perlumbaan boleh berlaku apabila berbilang sambungan cuba mengemas kini medan yang sama secara serentak, yang berpotensi membawa kepada keputusan yang tidak konsisten. Sebagai contoh, jika dua sambungan menambah pembilang "cuba" secara serentak, hasilnya mungkin hanya "cuba 1" dan bukannya "cuba 2."
Untuk mengelakkan sedemikian dalam situasi tertentu, beberapa pendekatan boleh digunakan:
Kemas Kini Atom:
Menggunakan pernyataan kemas kini atom menjamin bahawa operasi kenaikan dilaksanakan secara atom, menghalang sebarang keadaan perlumbaan. Contohnya:
UPDATE table SET tries = tries + 1 WHERE condition = value;
Penguncian Baris:
Pendekatan lain ialah menggunakan penguncian baris dengan jadual InnoDB. Ini memastikan bahawa sebarang pertanyaan lain yang cuba mengakses baris semasa kemas kini terpaksa menunggu sehingga kemas kini selesai. Pertanyaan itu akan menyerupai:
SELECT tries FROM table WHERE condition = value FOR UPDATE; -- Application logic to add to tries UPDATE table SET tries = newvalue WHERE condition = value;
Skim Versi:
Skim versi memperkenalkan lajur versi pada jadual. Kemas kini kemudiannya dikondisikan pada nilai versi lama, menghalang sebarang syarat perlumbaan dengan memastikan kemas kini digunakan hanya jika versi tidak berubah sejak ia dibaca pada mulanya. Pertanyaan akan kelihatan seperti:
SELECT tries, version FROM table WHERE condition = value; -- Application logic and old version storage UPDATE table SET tries = newvalue, version = version + 1 WHERE condition = value AND version = oldversion;
Jika kemas kini gagal, ini menunjukkan bahawa jadual telah dikemas kini sejak bacaan awal, memerlukan proses dimulakan semula.
Atas ialah kandungan terperinci Bagaimanakah kita boleh menghalang keadaan perlumbaan apabila menambah medan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!