Halang MySQL daripada membaca semasa mengemas kini
P粉190883225
P粉190883225 2023-11-07 18:05:53
0
1
616

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.

P粉190883225
P粉190883225

membalas semua(1)
P粉877114798

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.

BEGIN;
UPDATE MyTable SET something = '1234' WHERE id = 3;

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.

SET tx_isolation='READ-COMMITTED';

SELECT * FROM MyTable WHERE id = 3 LOCK IN SHARE MODE;
<hangs>

Kunci dalam mod kongsi membuatkan ia menunggu kerana masih terdapat kunci eksklusif tertunggak yang dicipta oleh kemas kini.

Dalam skrin pertama:

COMMIT;

Dalam skrin kedua, voila! Bacaan penyekatan akan dinyahsekat dan anda boleh melihat keputusan UDPATE serta-merta tanpa membuang urus niaga.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan