今回は、Silverの「S3 開発/SQL - S3.1 SQL コマンド(シーケンス)」からの出題です。
※この例題は実際の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事務局ではお応えできませんのでご了解ください。
© EDUCO All Rights Reserved.