Junior — Middle
Имали ли сте опит с вложени транзакции при работа с бази данни?
sobes.tech AI
Отговор от AI
Вложените транзакции са възможността да започнете друга транзакция вътре в една, която може да бъде потвърдена или отменена независимо. Повечето системи за управление на бази данни (DBMS) не поддържат директно вложени транзакции, но могат да се използват точки за запазване (savepoints).
В Go, при работа с бази данни чрез пакета database/sql, може да се използват savepoints за симулация на вложени транзакции:
// Започваме основната транзакция
tx, err := db.Begin()
if err != nil {
// обработка на грешка
}
// Създаваме точка за запазване
_, err = tx.Exec("SAVEPOINT sp1")
if err != nil {
// обработка на грешка
}
// Изпълняваме операции
// ...
// В случай на грешка, връщане към точката за запазване
_, err = tx.Exec("ROLLBACK TO SAVEPOINT sp1")
// В края, потвърждаване на основната транзакция
err = tx.Commit()
По този начин може да се контролира части от транзакцията, без да се отменя цялата операция.