HOME > 受験対策 > サンプル問題/例題解説 > Silverの例題解説「開発/SQL」 > SQLコマンド(シーケンス)

Silverの例題解説「開発/SQL - SQLコマンド(シーケンス)」

今回は、Silverの「開発/SQL - SQLコマンド(シーケンス)」からの出題です。

例題

Q. 以下のSQL文を実行した。
CREATE TABLE test (id SERIAL, val TEXT); これについて正しい説明をすべて選びなさい。
  1. A. id列には自動的にNOT NULL制約が付与される。
  2. B. id列には自動的にUNIQUE制約が付与される。
  3. C. id列には自動的にインデックスが作成される。
  4. D. id列の値をUPDATE文で更新することはできない。
  5. E. INSERT文でid列の値をNULLと指定するとエラーになる。

※この例題は実際のOSS-DB技術者認定試験とは異なります。

解答と解説

テーブル列のデータ型をSERIALと指定すると、自動的にシーケンスが作成され、その列のデフォルト値がシーケンスの値で設定されるようになります。
識別子となる列を自動採番したいときに使うことが多いので、その列をUNIQUEあるいはPRIMARY KEYとしたいことが多いでしょうが、自動的に設定されるのはNOT NULL制約だけで、UNIQUEあるいはPRIMARY KEYにするには、手作業で制約を追加する必要があります。
UNIQUE制約がないので、インデックスも自動的には作成されません。
単にデフォルト値がシーケンスの値になるだけで、実体としてはINTEGER型と同じなので、INSERTのときに列の値を指定すれば、その値でデータが作成されますし、UPDATE文で値を更新することもできますが、NOT NULL制約があるので、値をNULLに設定しようとするとエラーになります。
なお、INSERT文で列の値をシーケンスを使って生成するには、以下のように、列の値を指定しないか、あるいはDEFAULTを指定します。
INSERT INTO test (val) VALUES ('sample-1');
INSERT INTO test (id, val) VALUES (DEFAULT, 'sample-2');

従って、正解はAとEです。

  • 今回の解説について、理解できないポイントがあればどんどん質問をお寄せ下さい。
  • 採用になった方にはLPI-Japanオリジナルの記念品を贈呈します。
  • ご質問・ご意見はこちら
  • ※試験問題に関わるお問い合わせにつきましては、LPI-Japan事務局ではお応えできませんのでご了解ください。

ページトップへ