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

Pilih MySQL untuk pembaruan - itu tidak mengunci baris target. Bagaimana cara memastikannya?

SELECT FOR UPDATE mengunci baris yang Anda pilih untuk diperbarui hingga transaksi yang Anda buat berakhir. Transaksi lain hanya dapat membaca baris tersebut tetapi tidak dapat memperbaruinya selama transaksi pilih untuk pembaruan masih terbuka.

Untuk mengunci baris:

START TRANSACTION;
SELECT * FROM test WHERE id = 4 FOR UPDATE;
# Run whatever logic you want to do
COMMIT;

Transaksi di atas akan aktif dan akan mengunci baris sampai dilakukan.

Untuk mengujinya, ada berbagai cara. Saya mengujinya menggunakan dua instance terminal dengan klien MySQL dibuka di masing-masing instance.

Pada first terminal Anda menjalankan SQL:

START TRANSACTION;
SELECT * FROM test WHERE id = 4 FOR UPDATE;
# Do not COMMIT to keep the transaction alive

Pada second terminal Anda dapat mencoba memperbarui baris:

UPDATE test SET parent = 100 WHERE id = 4;

Karena Anda membuat pilihan untuk pembaruan pada first terminal kueri di atas akan menunggu hingga transaksi pilih untuk pembaruan dilakukan atau akan habis.

Kembali ke first terminal dan lakukan transaksi:

COMMIT;

Periksa second terminal dan Anda akan melihat bahwa kueri pembaruan telah dieksekusi (jika waktu tidak habis).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana situs web ini memperbaiki penyandian?

  2. Beberapa COUNT() untuk beberapa kondisi dalam satu kueri (MySQL)

  3. Tes penerimaan codeception dalam transaksi database di MySQL

  4. Mengapa MySQL tidak menggunakan indeks untuk perbandingan yang lebih besar?

  5. Bagaimana saya bisa menyimpan dan mengambil gambar dari database MySQL menggunakan PHP?