Rumah > Artikel > pangkalan data > Bagaimana untuk Mengelakkan Keadaan Perlumbaan Apabila Menambah Medan dalam Pangkalan Data MySQL?
Mengelakkan Keadaan Perlumbaan dalam Pangkalan Data MySQL Meningkatkan Kemas Kini Medan
Untuk mengelakkan keadaan perlumbaan dalam pangkalan data MySQL di mana berbilang sambungan cuba mengemas kini rekod yang sama, terutamanya apabila ia melibatkan penambahan medan seperti "cuba", adalah penting untuk melaksanakan yang sesuai langkah-langkah.
Satu penyelesaian yang berkesan ialah menggunakan kemas kini atom. Menggunakan pernyataan kemas kini MySQL dengan klausa WHERE membenarkan operasi atom. Contohnya:
update table set tries=tries+1 where condition=value;
Pernyataan ini memastikan bahawa operasi kenaikan berlaku secara atom, menghapuskan risiko keadaan perlumbaan.
Sebagai alternatif, penguncian baris boleh digunakan. Dengan menggunakan jadual InnoDB dan bukannya jadual MyISAM, anda boleh mengunci baris semasa melakukan kemas kini. Pertanyaan berikut menunjukkan pendekatan ini:
select tries from table where condition=value for update; .. do application logic to add to `tries` update table set tries=newvalue where condition=value;
Pendekatan ini menghalang pertanyaan lain daripada mengakses baris semasa kemas kini sedang diproses, menjamin bahawa nilai terkini dikembalikan.
Kaedah lain melibatkan pelaksanaan skema versi. Dengan menambahkan lajur versi pada jadual, pertanyaan boleh dibina seperti berikut:
select tries,version from table where condition=value; .. do application logic, and remember the old version value. update table set tries=newvalue,version=version + 1 where condition=value and version=oldversion;
Pendekatan ini memastikan kemas kini hanya berjaya jika versi yang disimpan sepadan dengan versi yang diperoleh pada permulaan pertanyaan. Jika kemas kini gagal, ini menunjukkan bahawa sambungan lain telah mengubah suai jadual dan pertanyaan mesti dilaksanakan semula.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Keadaan Perlumbaan Apabila Menambah Medan dalam Pangkalan Data MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!