PREPARATION
受験対策

Silverの例題解説
「S3.3 トランザクションの概念」

今回は、Silverの「S3 開発/SQL - S3.3 トランザクションの概念」からの出題です。

例題

3.23

psqlでデータベースに接続し、次の一連のSQLを実行した。
CREATE TABLE test (id INTEGER, val TEXT);
START TRANSACTION;
INSERT INTO test (id, val) VALUES (1, ‘abc’);
INSERT INTO test (idd, val) VALUES (2, ‘pqr’);
INSERT INTO test (id, val) VALUES (3, ‘xyz’);
COMMIT;

2つ目のINSERTで、id とすべきところを間違って idd としてしまったため、エラーになった。最後のCOMMITを実行した後の状態について正しく述べているものを2つ選びなさい。

  1. test表にはデータが1行もない
  2. test表にはデータが1行だけある

  3. test表にはデータが2行ある

  4. COMMITはエラーを起こす

  5. 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事務局ではお応えできませんのでご了解ください。

企業の基幹システムや業務システムでの
OSS-DBの採用がますます拡大している中、
昇格・昇給・就職・転職に必ず役立つ認定資格になります

OSS-DBの受験対策について

受験の学習をサポートする情報や対策に役立つ情報をご紹介

サンプル問題/例題解説

例題 のアーカイブを試験ごとにまとめています。OSS-DB技術者認定試験の学習にお役立てください

学習教材・教育機関のご紹介

OSS-DB認定教材や教育機関について詳しくご説明いたします。

無料技術解説セミナー

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

OSS-DB道場

受験準備をされていらっしゃる方々を対象に、無料技術解説セミナーの日程をお知らせしています。

LPI-Japan
Platinum Sponsors