2016-09-22 47 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本身期间出现问题。通常你不应该担心它。