MySQL'de iyimser kilitleme nasıl doğru şekilde uygulanır?
Ekibimiz aşağıda # 4 yapmamız gerektiği sonucuna varmıştır, aksi takdirde başka bir iş parçacığının kaydın aynı sürümünü güncelleyebilme riski vardır, ancak bunun bunu yapmanın en iyi yolu olduğunu doğrulamak istiyoruz.
- Tabloda, örneğin sütun adı = "sürüm" için iyimser kilitleme kullanmak istediğiniz bir sürüm alanı oluşturun
- Seçimlerde, sürüm sütununu eklediğinizden ve sürümü not ettiğinizden emin olun
- Kayda yapılan bir sonraki güncellemede, güncelleme ifadesi "burada sürüm = X" değerini vermelidir; burada X, # 2'de aldığımız sürümdür ve bu güncelleme ifadesi sırasında sürüm alanını X + 1 olarak ayarlamalıdır
SELECT FOR UPDATE
Güncellemeye çalıştığımız kayıtta kimlerin değişiklik yapabileceğini serileştirebilmemiz için güncelleyeceğimiz bir kayıt üzerinde bir işlem gerçekleştirin .
Açıklığa kavuşturmak için, aynı zaman penceresinde aynı kaydı seçen iki iş parçacığının, kaydı aynı anda denemeye ve güncellemeye çalışırlarsa, kaydın aynı sürümünü birbirlerinin üzerine yazmasını engellemeye çalışıyoruz. # 4 yapmazsak, her iki iş parçacığı da aynı anda kendi işlemlerini girerse (ancak henüz güncellemelerini yayınlamamışsa), güncellemeye gittiklerinde, GÜNCELLEME'yi kullanacak ikinci iş parçacığının ... burada sürüm = X eski veriler üzerinde çalışacaktır.
Sürüm alanları / iyimser kilitleme kullansak da güncelleme yaparken bu kötümser kilitlemeyi yapmamız gerektiğini düşünüyor muyuz?
SELECT ... FOR UPDATE
ikisi değil, sürüm sıra veya iyimser kilitleme. Yanıttaki ayrıntılara bakın.