2016-09-22 48 views
1

我使用Sequel訪問MySql和SQL Server數據庫。續集事務涵蓋提交期間的錯誤

續集允許我做交易是這樣的:

@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本身期間出現問題。通常你不應該擔心它。