cari

Rumah  >  Soal Jawab  >  teks badan

Halang MySQL daripada membaca semasa mengemas kini

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粉190883225P粉190883225390 hari yang lalu618

membalas semua(1)saya akan balas

  • P粉877114798

    P粉8771147982023-11-08 11:37:07

    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.

    balas
    0
  • Batalbalas