Saya telah mencoba untuk memahami perbedaan antara keduanya. Saya akan mendokumentasikan apa yang saya temukan dengan harapan dapat bermanfaat bagi orang berikutnya.
Keduanya LOCK IN SHARE MODE
dan FOR UPDATE
memastikan tidak ada transaksi lain yang dapat memperbarui baris yang dipilih. Perbedaan antara keduanya adalah bagaimana mereka memperlakukan kunci saat membaca data.
LOCK IN SHARE MODE
tidak mencegah transaksi lain membaca baris yang sama yang dikunci.
FOR UPDATE
mencegah pembacaan penguncian lainnya dari baris yang sama (pembacaan non-penguncian masih dapat membaca baris itu; LOCK IN SHARE MODE
dan FOR UPDATE
sedang mengunci bacaan).
Ini penting dalam kasus seperti memperbarui penghitung, di mana Anda membaca nilai dalam 1 pernyataan dan memperbarui nilai di yang lain. Di sini menggunakan LOCK IN SHARE MODE
akan memungkinkan 2 transaksi untuk membaca nilai awal yang sama. Jadi jika penghitung bertambah 1 oleh kedua transaksi, jumlah akhir mungkin hanya bertambah 1 - karena kedua transaksi awalnya membaca nilai yang sama.
Menggunakan FOR UPDATE
akan mengunci transaksi ke-2 dari membaca nilai hingga yang pertama selesai. Ini akan memastikan penghitung bertambah 2.