今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(テーブル定義)」からの出題です。
UPDATE emp SET eid = 4 WHERE ename = 'Mary';
※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2011年9月12日
テーブルには主キー、外部参照といった制約をつけることができます。
主キー(PRIMARY KEY)は、その列の値が一意で、かつNULLでないことが制約となります。
外部参照は、その列の値が他のテーブルの列を参照しているため、参照先のテーブルに値が存在していることが制約となります。
この例題では部門表(dept)と従業員表(emp)を作成し、dept 表では did 列が主キー、emp 表では eid が主キーとなっています。
また、emp 表の did 列は dept 表の did 列を外部参照しています。
テーブルの作成後、それぞれに2行ずつのデータを挿入しています。
Aは dept 表への挿入で、did に 20 を指定していますが、did が 20 の行が既に存在しているため、主キー制約の違反でエラーになります。
Bは emp 表への挿入で、eid が 3 の行はまだ存在しておらず、また、did の 20 は dept 表にありますから問題ありません。
Cは dept 表の HR の行の did を 20 に変更しようとしていますが、did が 20 の行が既に存在しているので、主キー制約の違反となります。
Dは emp 表の eid が 1 の行の did を 40 に変更しようとしていまが、dept 表に did が 40 の行がないので外部参照制約の違反となります。
Eは emp 表の Mary の行の eid を 4 に変更しようとしています。
主キーの値の変更はデータベースの運用管理上、望ましくないことが多いですが、この例題の場合、eid が 4 の行はありませんから更新は成功します。
従って、正解はBとEです。
今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.