■例題3
下記のCREATE TABLE文について記述した内容のうち、間違っているものを選択してください。
create table test1 (col1 number primary key, col2 varchar2(50), col3 date, col4 number, col5 number, constraint test1_uk unique(col4,col5));
a.unique制約の制約名はtest1_ukである
b.主キーの制約名はORACLEが自動的に作成する
c.col4、col5は個々の列内で重複しない値であれば格納ができる
d.col1にNULL値を格納することはできない
■例題の範囲をおさらい
参考:「SQLで表のデータを制限する」
制約の意味や記述方法を覚えておきましょう。
■正解
c
■解説
選択肢a、b:データディクショナリで確認することが可能です。
SQL> select column_name,constraint_name 2 from user_cons_columns 3 where table_name='TEST1'; COLUMN_NAME CONSTRAINT_NAME -------------------- ------------------------------------------ COL1 SYS_C004258 COL5 TEST1_UK COL4 TEST1_UK
COL4、COL5には、TEST1_UKという名前のUNIQUE制約が定義されています。
COL1は制約名(CONSTRAINT句)を省略したため、ORACLEが自動的に「SYS_Cxxxx」という形式の名前を作成しています。
選択肢c:COL4、COL5には、TEST1_UKという名前のUNIQUE制約が複合で付けられています。この場合、おのおのの列内で重複しない値を格納できるのではなく、COL4、COL5の値を組み合わせてみたときに重複しない値を格納できます。
SQL> select col4,col5 from test1; COL4 COL5 ---------- ---------- 1 1 1 2 1 3
選択肢d:COL1列には主キー制約が定義されています。そのため、重複する値、NULL値は格納できません。
よって、間違っているものは選択肢cです。
■まとめ
次の内容をチェックしましょう。
今回の範囲は、引っ掛け問題が多い部分です。内容をよく理解し、ミスをしないようにしましょう。
制約については、列制約構文と表制約構文の違いも確認しておきましょう。
次回は表以外のスキーマオブジェクトの作成と管理について、間違いやすい点にポイントを絞って説明します。
Copyright © ITmedia, Inc. All Rights Reserved.