2016-09-22 2 views
1

Я использую Sequel для доступа к базам данных MySql и SQL Server.Операции с транзакциями транзакций во время фиксации

Sequel позволяет мне делать сделки, как это:

@client = Sequel.connect(config) 
@client.transaction do 
    @client.execute("DELETE FROM UserGroup WHERE UserId = #{user_id}") 
    @client.execute("DELETE FROM User WHERE Id = #{user_id}") 
end 

Так что, если что-то пойдет не так с моими запросами, сделка будет откат, и все будет в порядке.

Если мои запросы в порядке, но в момент совершения что-то не получается в базе данных, а коммит не выполняется, будет ли код Ruby обнаружен и сбой тоже?

+1

Связанные: http://stackoverflow.com/questions/3960189/can-a-commit-statement-in-sql-ever-fail-how –

ответ

1

Зависит от того, как реализован адаптер базы данных. Это может вызвать исключение, которое будет отличаться от Sequel::Rollback. Поэтому он не будет поймать метод transaction и будет пузыриться до вашего кода.

Но обычно проблемы возникают во время операций внутри транзакции, а не во время самого COMMIT. Обычно вы не должны беспокоиться об этом.

Смежные вопросы