Rumah > Artikel > pangkalan data > Bagaimana untuk melaksanakan penguncian optimistik dalam mysql
Dalam mysql, anda boleh menggunakan mekanisme rakaman Versi data untuk melaksanakan penguncian optimistik Tambahkan medan versi pada jadual data Nombor versi yang direkodkan ditambah satu untuk setiap operasi untuk menentukan sama ada nilai versi sama dengan nilai yang baru ditanya , jika sama, kemas kini dilakukan, jika tidak sama, tiada kemas kini dilakukan.
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi mysql8.0.22, komputer Dell G3.
Kaedah pelaksanaan
1 Gunakan mekanisme rakaman versi versi data untuk melaksanakannya. Ini adalah kaedah pelaksanaan penguncian optimistik yang paling biasa digunakan .
2. Versi data, iaitu, menambahkan pengecam versi pada data, biasanya dengan menambahkan medan versi angka pada jadual pangkalan data. Apabila membaca data, nilai medan versi dibaca bersama Setiap kali data dikemas kini, nilai versi dinaikkan sebanyak 1. Apabila kami menyerahkan kemas kini, kami membandingkan maklumat versi semasa bagi rekod yang sepadan dalam jadual pangkalan data dengan nilai versi yang dikeluarkan buat kali pertama Jika nombor versi semasa jadual pangkalan data adalah sama dengan nilai versi yang dikeluarkan untuk kali pertama, ia akan dikemas kini. Jika tidak, ia dianggap sebagai data tamat tempoh.
Contoh
update TABLE set value=2,version=version+1 where id=#{id} and version=#{version}
Penguncian optimis tidak disertakan dengan pangkalan data dan perlu dilaksanakan oleh kita sendiri.
Penguncian optimis merujuk kepada semasa mengendalikan pangkalan data (operasi kemas kini) Idea ini sangat optimis bahawa operasi ini tidak akan menyebabkan konflik Semasa mengendalikan data, tiada pemprosesan khas lain dilakukan (iaitu, tiada kunci tambahan). , dan selepas mengemas kini, tentukan sama ada terdapat konflik. Idea keseluruhan ialah idea CAS.
Pelaksanaan biasa adalah seperti berikut: apabila mengendalikan (mengemas kini) data dalam jadual, mula-mula tambah medan versi (versi) pada jadual data dan tambahkan nombor versi rekod itu sebanyak 1 untuk setiap operasi . Maksudnya, tanya rekod dahulu dan dapatkan medan versi Jika anda ingin mengendalikan (kemas kini) rekod itu, tentukan dahulu sama ada nilai versi pada masa ini sama dengan nilai versi yang baru ditanya adalah sama, kemudian terangkan Dalam tempoh ini, jika tiada program lain beroperasi padanya, anda boleh melakukan kemas kini dan menambah 1 pada nilai medan versi jika didapati semasa kemas kini bahawa nilai versi pada masa ini tidak sama kepada nilai versi yang baru diperolehi, bermakna tempoh ini telah Jika program lain beroperasi padanya, operasi kemas kini tidak akan dilakukan.
cth:
Operasi pesanan merangkumi 3 langkah:
1 Tanya maklumat inventori:
select (id,count,version) from t_goodsku where id=#{id}
2.
Pengiraan dalam program: count = count - 2;
3 Kemas kini inventori:
update t_goodsku set count={count},version=version+1 where id=#{id} and version=#{version};
Versi yang terdapat dalam langkah 1 sebenarnya adalah petikan (baca -. Mekanisme MVCC di bawah mekanisme pengasingan -commited dan read-repeatable), dalam kes ini, apabila akan mengemas kini dalam langkah 3, dapatkan kunci, dan gunakan version=#{version} dalam keadaan di mana untuk menilai, yang sebenarnya memerlukan versi semasa dan Bandingkan versi syot kilat dalam langkah 1
Jika perbandingan berjaya, ini bermakna data ini belum dikemas kini oleh urutan lain dalam tempoh ini, dan kemas kini berjaya; >Jika perbandingan gagal, Ini bermakna data ini telah dikemas kini dalam tempoh ini, maka kemas kini gagal, ralat dilaporkan, putar balik atau putaran.
Sudah tentu, ini adalah untuk mensimulasikan senario penguncian yang optimis, sebenarnya, mengemas kini inventori boleh dicapai dalam satu langkah:
1 🎜>Pembelajaran yang disyorkan:
tutorial video mysqlAtas ialah kandungan terperinci Bagaimana untuk melaksanakan penguncian optimistik dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!