Junior — Middle
Projelerinizde işlemler sırasında satırları kilitlemek için SELECT FOR UPDATE komutunu kullandınız mı?
sobes.tech yapay zeka
AI'dan gelen yanıt
Evet, SELECT FOR UPDATE komutu, bir işlem sırasında seçilen satırları kilitlemek için sıklıkla kullanılır, böylece yarış durumu önlenir ve veri bütünlüğü sağlanır.
Go'da, database/sql veya ORM aracılığıyla veritabanlarıyla çalışırken, böyle bir sorgu çalıştırabilir ve satırları sonraki güncelleme için kilitleyebilirsiniz:
// Go'da SELECT FOR UPDATE kullanımına örnek
func updateUserBalance(db *sql.DB, userID int, amount float64) error {
tx, err := db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
var balance float64
err = tx.QueryRow("SELECT balance FROM users WHERE id = ? FOR UPDATE", userID).Scan(&balance)
if err != nil {
return err
}
newBalance := balance + amount
_, err = tx.Exec("UPDATE users SET balance = ? WHERE id = ?", newBalance, userID)
if err != nil {
return err
}
return tx.Commit()
}
Burada, SELECT FOR UPDATE kullanılarak kullanıcı satırı kilitlenir, böylece diğer işlemler bu satırı değiştiremez ve bu da yarış koşullarını önler.