SQLite でトランザクションを利用する

SPECIAL


SQLite でトランザクションを利用する

iPhone アプリのプログラミングでは、データベースとして SQLite 3 を利用することが出来るようになっています。

この SQLite でトランザクションを利用する方法について調べてみました。

トランザクションというのは、いくつかのデータベースの操作を "トランザクション" というひとまとまりとして扱うことで、データベース操作の途中で割り込まれたり、処理が途中で失敗したりしたときに、その一連のデータベース操作をなかったことにすることのできる仕組みです。

なお、未確認ですけど SQLite でまとめて複数のレコードを更新するような場合は、トランザクションを利用しないと遅いらしい情報もありましたので、そういった面でも積極的にトランザクションを行うと効率が良いのかもしれません。

 

SQLite 3 でトランザクションを開始するには、次の SQL 文を実行します。

BEGIN TRANSACTION tran1

これで、ここからトランザクションが開始されます。ここから始まる一連の処理は、トランザクションを終了するまで、1 つのグループとして扱われることになります。

ちなみに "tran1" はトランザクションに付けられる任意の名前です。

 

いくつかの SQL 文を実行して、それら一連の処理が完了したら、次のようにしてトランザクションを完了させます。

COMMIT TRANSACTION tran1

これを "コミット" といい、これまでの一連の処理がこれで確定されることになります。

 

もし、エラーや何らかの理由により一連の処理を取消したい場合は、コミットではなくロールバックを実行します。

ROLLBACK TRANSACTION tran1

こうすることで、"BEGIN TRANSACTION" から始まった一連の操作をなかったことにすることができます。

 

トランザクションを活用することにより、本来セットで実施されなければいけない処理が、途中で中断されてしまってデータベースに矛盾が生じるということを未然に防ぐことが可能になります。

なお、トランザクション中に、SQLite のデータベースを整頓する "VACUUM" 文を実行しようとすると、"SQL logic error or missing database" というエラーが発生するようでしたので、トランザクションを利用する際には、この辺りも念頭に置いておくと良いと思います。