Ответ 1
Убедитесь, что автокоммит включен. Многие инструменты командной строки, uis и даже драйверы позволяют по умолчанию использовать
Поэтому я не могу быть слишком конкретным, но я думаю, что я могу вам сказать, будет достаточно, чтобы понять это. Сначала я использую gorp для настройки и получения транзакции. Я использую драйвер github.com/denisenkom/go-mssqldb
.
Затем я выполняю ряд операций, и если из них не удается я rollback
, и если все имеют успех я commit
. Проблема в том, что он только откатывает утверждение, которое не удалось, а не остальные операции. Я ошибаюсь, что это не так, как это должно работать?
Вот несколько грубого psudocode, чтобы дать вам лучшее представление о том, что я говорю:
trans,err := dbmap.Begin()
//assume all errors are received and checked before continuing
id := trans.Exec("insert thing") //successful, persists after rollback
thing := trans.Select("Select thing") //successful
trans.Exec("update other_thing with thing") //successful, persists after rollback
newthing := trans.Exec("insert new_thing with thing") //fails, rollsback
if err != nil{
trans.Rollback() //No errors
return
}
trans.Commit()
Я ошибаюсь, что должно rollback
все, начиная с dbmap.Begin()
? Это ошибка в реализации драйвера? Любая помощь приветствуется. Спасибо!
Обновление
Протестировано https://play.golang.org/p/0L3Vgk8C_F, и это сработало, поэтому я предполагаю, что это означает, что это связано с gorp. Я использую ветвь v1, так как это скоро будет производство, и поэтому стабильность является ключевой. Я буду разбирать его, но похоже, что он просто слегка обертывает его.
Убедитесь, что автокоммит включен. Многие инструменты командной строки, uis и даже драйверы позволяют по умолчанию использовать
В соответствии с этим (я прочитал всего несколько строк) https://technet.microsoft.com/en-us/library/ms187878(v=sql.105).aspx
autocommit, по-видимому, отключен, это приводит меня к выводу, что если автор go-mssqldb не реализовал включение/выключение для этой функции, то он включен.
Вы можете переключить его самостоятельно, просто выполните поиск SET IMPLICIT_TRANSACTIONS