Saya mempunyai dua pertanyaan mudah, satu untuk membaca jadual dan satu untuk mengemas kini jadual. Cara mengunci bacaan pertanyaan pilihan semasa pertanyaan kemas kini sedang dijalankan. Sekarang dalam MySQL InnoDB, saya perhatikan bahawa penulisan/kemas kini dikunci secara lalai, tetapi baca/pilih mendapatkan data lama sebelum transaksi.
Saya cuba menggunakan transaksi di dalam pertanyaan kemas kini dan kemudian SELECT ... FOR UPDATE
- di luar transaksi - tetapi nampaknya tidak berjaya. Selain itu, untuk tujuan ujian, saya ingin tahu cara memperlahankan pertanyaan KEMASKINI. Saya terjumpa SLEEP(X) tetapi saya tidak tahu cara melaksanakannya dalam pertanyaan kemas kini.
Bagaimana untuk membuat setiap pertanyaan menunggu untuk dibaca/tulis sehingga penulisan selesai.
Menggunakan
READ-COMMITTED
事务将查看最新提交的事务。更改,并使用SELECT ... LOCK IN SHARE MODE
akan menyebabkan bacaan disekat sehingga sebarang kemas kini tertunggak dilakukan.Cuba ini. Dalam satu skrin, mulakan transaksi dan kemas kini. Tiada SLEEP() diperlukan, transaksi tidak dilakukan. Kunci yang dibuat oleh UPDATE akan terus wujud sehingga anda membuat komitmen.
Jangan hantar lagi.
Sementara itu, dalam skrin kedua, tetapkan pengasingan transaksi kepada transaksi komit baca. Tidak perlu memulakan transaksi eksplisit kerana pertanyaan InnoDB menggunakan urus niaga walaupun ia dikomit secara automatik.
Kunci dalam mod kongsi membuatkan ia menunggu kerana masih terdapat kunci eksklusif tertunggak yang dicipta oleh kemas kini.
Dalam skrin pertama:
Dalam skrin kedua, voila! Bacaan penyekatan akan dinyahsekat dan anda boleh melihat keputusan UDPATE serta-merta tanpa membuang urus niaga.