Назад к вопросам
Junior — Middle
77
Вам приходилось применять команду SELECT FOR UPDATE в своих проектах для блокировки строк при транзакциях?
Компании, где спрашивали
IDS
Ответ от нейросети
sobes.tech AI
Да, команда SELECT FOR UPDATE часто используется для блокировки выбранных строк в базе данных на время транзакции, чтобы предотвратить состояние гонки и обеспечить целостность данных.
В Go, при работе с базами данных через database/sql или ORM, можно выполнять такой запрос, чтобы заблокировать строки для последующего обновления:
// Пример использования SELECT FOR UPDATE в Go
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 блокирует строку пользователя, чтобы другие транзакции не могли её изменить до завершения текущей транзакции. Это предотвращает проблемы с конкурентным доступом, например, двойное списание средств.