問題ID: 8536 NOT NULL制約
- フォーラムは新サイトへ移行しました。
- このフォーラムではゲスト投稿が禁止されています
問題ID: 8536 NOT NULL制約
msg# 1
hasimohi
投稿数: 14
<解説>
・表が作成され、ID列にはNOT NULL制約が定義される
EMPLOYEES表のEMPLOYEE_ID列にはPRIMARY KEY制約が定義されていますが、NOT NULL制約は定義されていないため、副問合せによって新たに作成された表にNOT NULL制約は定義されません。明示的に定義されたNOT NULL制約だけが、副問合せによって新たに作成された表にコピーされます。
→問題文のEMPLOYEES表のEMPLOYEE_ID列はNOT NULLとなっています。
これは矛盾しているのではないでしょうか?
そもそも、PRIMARY KEYを設定した列には自動的にNOT NULL制約が適用されるのではないでしょうか?
・表が作成され、ID列にはNOT NULL制約が定義される
EMPLOYEES表のEMPLOYEE_ID列にはPRIMARY KEY制約が定義されていますが、NOT NULL制約は定義されていないため、副問合せによって新たに作成された表にNOT NULL制約は定義されません。明示的に定義されたNOT NULL制約だけが、副問合せによって新たに作成された表にコピーされます。
→問題文のEMPLOYEES表のEMPLOYEE_ID列はNOT NULLとなっています。
これは矛盾しているのではないでしょうか?
そもそも、PRIMARY KEYを設定した列には自動的にNOT NULL制約が適用されるのではないでしょうか?
Re: 問題ID: 8536 NOT NULL制約
msg# 1.1
quensan
投稿数: 119
>→問題文のEMPLOYEES表のEMPLOYEE_ID列はNOT NULLとなっています。
PRIMARY KEY制約の列をdescribeコマンドで見ると、自動的に適用されたNOT NULLが表示されます。
だから問題文には「EMPLOYEES表のEMPLOYEE_ID列にはPRIMARY KEY制約だけが定義されています。」と書かれているのではないでしょうか。
SQL> create table t1 (
2 id number(4) primary key,
3 text varchar2(10)
4 );
表が作成されました。
SQL> desc t1
名前 NULL? 型
------ -------- ----------------------------
ID NOT NULL NUMBER(4)
TEXT VARCHAR2(10)
実際の制約の種類はuser_constraints表などで確認できます。constraint_typeの「P」はPRIMARY KEY制約です。
SQL> select constraint_name, constraint_type, table_name, status from user_constraints where table_name = 'T1';
CONSTRAINT_NAME CON TABLE_NAME STATUS
-------------------- --- -------------------- ------------------------
SYS_C0011069 P T1 ENABLED
>そもそも、PRIMARY KEYを設定した列には自動的にNOT NULL制約が適用されるのではないでしょうか?
解説にあるように、明示的に定義されたNOT NULL制約だけが、副問合せによって新たに作成された表にコピーされます。
PRIMARY KEY制約の列をdescribeコマンドで見ると、自動的に適用されたNOT NULLが表示されます。
だから問題文には「EMPLOYEES表のEMPLOYEE_ID列にはPRIMARY KEY制約だけが定義されています。」と書かれているのではないでしょうか。
SQL> create table t1 (
2 id number(4) primary key,
3 text varchar2(10)
4 );
表が作成されました。
SQL> desc t1
名前 NULL? 型
------ -------- ----------------------------
ID NOT NULL NUMBER(4)
TEXT VARCHAR2(10)
実際の制約の種類はuser_constraints表などで確認できます。constraint_typeの「P」はPRIMARY KEY制約です。
SQL> select constraint_name, constraint_type, table_name, status from user_constraints where table_name = 'T1';
CONSTRAINT_NAME CON TABLE_NAME STATUS
-------------------- --- -------------------- ------------------------
SYS_C0011069 P T1 ENABLED
>そもそも、PRIMARY KEYを設定した列には自動的にNOT NULL制約が適用されるのではないでしょうか?
解説にあるように、明示的に定義されたNOT NULL制約だけが、副問合せによって新たに作成された表にコピーされます。
Re: 問題ID: 8536 NOT NULL制約
msg# 1.2
hasimohi
投稿数: 14
ご回答ありがとうございました。