今回は、Silverの「開発/SQL - トランザクション」からの出題です。
test表にはデータが1行だけある
test表にはデータが2行ある
COMMITはエラーを起こす
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2013年1月10日
PostgreSQLのトランザクション機能では、途中のSQL文がエラーを起こすと、トランザクション自体がエラーになったとみなされ、以後のSQL文がすべてエラーになる、という制限があります。従って、3つ目のINSERTもエラーになります。
この状態で正常に受け付けられるSQL文はROLLBACKとCOMMITだけです。
ROLLBACKは文字通り、トランザクション内のすべての更新が取り消されますが、COMMITを実行しても内部的にはROLLBACKが発行され、すべての更新が取り消されます。この場合、COMMIT自体はエラーとはなりませんが、実行後に ROLLBACK と表示されます。
従って正解は A と E です。
データベースの種類によっては、エラーとなったSQL文を無視するだけで、COMMITによりデータ更新の書き込みを可能にしているものもあります。そのようなデータベースでは、test表には2行のデータが書き込まれますが、PostgreSQLでは1行も書き込まれないので注意してください。
トランザクション機能に関する注意事項については、例えば以下の「オススメ!OSS-DB情報 第1回 トランザクション」なども参考にしてください。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.