Sobes.tech
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.