2016-09-22 10 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 

何かが私のクエリとうまくいかないのであれば、トランザクションはロールバックされますと、すべてがOKになります。

私のクエリはOKですが、コミットの瞬間に何かがデータベース上でうまくいかず、コミットが失敗した場合、Rubyコードはそれを検出して失敗するでしょうか?

+1

関連:http://stackoverflow.com/questions/3960189/can-a-commit-statement-in-sql-ever-fail-how –

答えて

1

データベースアダプタの実装方法によって異なります。それはSequel::Rollbackとは異なる例外をスローする可能性があります。したがって、transactionメソッドによってキャッチされず、コードにバブルが発生します。

通常、問題はトランザクション内の操作中に発生し、COMMIT中では発生しません。通常、あなたはそれについて心配するべきではありません。

関連する問題