Junior — Middle
Жобаларыңызда транзакциялар учурунда саптарды бөгөттөө үчүн SELECT FOR UPDATE буйругун колдондуңузбу?
sobes.tech AI
AIден жооп
Ооба, SELECT FOR UPDATE көбүнчө тандалган саптарды транзакция учурунда бөгөп коюу үчүн колдонулат, бул атаандаштык шарттарын алдын алууга жана маалыматтардын бүтүндүгүн камсыз кылууга жардам берет.
Goда, database/sql же ORM аркылуу маалымат базасы менен иштеп жатканда, мындай суроону ишке ашырып, саптарды кийинки жаңыртуу үчүн бөгөп коюуга болот:
// Goда `SELECT FOR UPDATE` колдонуу мисалы
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()
}
Бул жерде, SELECT FOR UPDATE колдонуусу менен колдонуучунун сапты бөгөп, башка транзакциялар аны өзгөртө албайт, бул атаандаштык шарттарын алдын алууга жардам берет.