Walaupun MySQL secara asli tidak menyokong penguncian optimistik, ia boleh dilaksanakan melalui binaan SQL standard dan logik kod .
Tiada Pendekatan Mengunci:
Dalam pendekatan ini, tiada penguncian eksplisit digunakan. Walau bagaimanapun, ketekalan data tidak dipastikan jika berbilang pengguna mengemas kini data yang sama secara serentak.
SELECT data from theTable WHERE iD = @theId; {code that calculates new values} UPDATE theTable SET val1 = @newVal1, val2 = @newVal2 WHERE iD = @theId;
Pendekatan Penguncian Optimis:
Pendekatan ini termasuk menyemak pengubahsuaian sebelum melakukan kemas kini. Jika pengubahsuaian telah berlaku, biasanya ditentukan oleh versi baris atau semakan kesamaan, kemas kini ditolak.
SELECT iD, val1, val2 FROM theTable WHERE iD = @theId; {code that calculates new values} UPDATE theTable SET val1 = @newVal1, val2 = @newVal2 WHERE iD = @theId AND val1 = @oldVal1 AND val2 = @oldVal2; {if AffectedRows == 1 } {go on with your other code} {else} {decide what to do since it has gone bad... in your code} {endif}
Penguncian Optimis Versi:
Serupa dengan penguncian optimistik pendekatan, teknik ini menggunakan lajur versi untuk menyemak pengubahsuaian.
SELECT iD, val1, val2, version FROM theTable WHERE iD = @theId; {code that calculates new values} UPDATE theTable SET val1 = @newVal1, val2 = @newVal2, version = version + 1 WHERE iD = @theId AND version = @oldversion; {if AffectedRows == 1 } {go on with your other code} {else} {decide what to do since it has gone bad... in your code} {endif}
Transaksi dan Tahap Pengasingan:
Transaksi boleh digunakan bersama dengan penguncian optimistik untuk memastikan ketekalan data. Walau bagaimanapun, pilihan tahap pengasingan transaksi boleh menjejaskan keberkesanan penguncian optimistik.
Pengujian dan Pengesahan:
Untuk memastikan penguncian optimistik dilaksanakan dengan betul, adalah disyorkan untuk lakukan ujian dan pengesahan menyeluruh menggunakan senario dan tahap pengasingan yang berbeza.
Atas ialah kandungan terperinci Bagaimanakah Penguncian Optimis Boleh Dilaksanakan dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!