Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

UNTUK PEMBARUAN v/s LOCK IN SHARE MODE :Izinkan utas bersamaan untuk membaca nilai status terbaru dari baris terkunci

LOCK IN SHARE MODE akan memungkinkan utas ke-2 untuk membaca nilainya, tetapi nilai sebenarnya adalah nilai sebelum kueri (baca berkomitmen) atau sebelum transaksi (pembacaan berulang) dimulai (karena MySQL menggunakan multi-versi; dan apa harus dilihat oleh transaksi kedua didefinisikan oleh tingkat isolasi). Jadi jika transaksi pertama tidak dilakukan pada saat membaca, nilai lama akan dibaca.

Dalam skenario Anda, yang terbaik adalah memiliki 1 transaksi yang mengunci catatan dengan pilih untuk pembaruan, selain yang berfungsi pada catatan dan saat komit/kembalikan yang ketiga membuka kunci catatan.

Transaksi utas kedua dengan pilih untuk pembaruan akan menunggu yang pertama selesai, kemudian akan membaca nilai aktual dan akan memutuskan untuk tidak melanjutkan dengan transaksi lain, tetapi untuk memberi tahu pengguna bahwa catatan dikunci.

Untuk menghindari kebuntuan, pastikan Anda melakukan select for update menggunakan indeks unik.

Contoh kode:

connection.setautocommit(false);
//transaction-1
PreparedStatement ps1 = "Select locked from tableName for update where id="key" and   locked=false);
ps1.executeQuery();

//transaction 2
PreparedStatement ps2 = "Update tableName set locked=true where id="key";
ps2.executeUpdate();
connection.setautocommit(true); // here we allow other transactions / threads to see the new value

connection.setautocommit(false);
//transaction 3
PreparedStatement ps3 = "Update tableName set aField="Sthg" where id="key" And date="D" and topic="T";
ps3.executeUpdate();

// probably more queries

// reset locked to false
 PreparedStatement ps4 = "Update tableName set locked=false where id="key";
ps4.executeUpdate();

//commit
connection.setautocommit(true);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Normalisasi basis data untuk sistem perpesanan seperti facebook

  2. Bagaimana cara mendapatkan rownum Mysql terus menerus di atas pagenation

  3. Bagaimana cara mengubah SQL kompleks ini menjadi kueri model Django?

  4. Permintaan DATETIME DIFF MySQL

  5. Cara Mengatur Database MySQL WordPress di Cloud