PREPARATION
受験対策

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

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

例題

3.82

以下のSQL文を実行した。

CREATE TABLE test (id SERIAL, val TEXT);

これについて正しい説明をすべて選びなさい。

  1. id列には自動的にNOT NULL制約が付与される。
  2. id列には自動的にUNIQUE制約が付与される。
  3. id列には自動的にインデックスが作成される。
  4. id列の値をUPDATE文で更新することはできない。
  5. INSERT文でid列の値をNULLと指定するとエラーになる。

※この例題は実際のOSS-DB技術者認定試験とは異なります。
例題公開日:2017年12月25日

解答と解説

テーブル列のデータ型を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事務局ではお応えできませんのでご了解ください。

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

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

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

サンプル問題/例題解説

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

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

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

無料技術解説セミナー

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

OSS-DB道場

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

LPI-Japan
Platinum Sponsors