Re: 問題ID: 8536 NOT NULL制約
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制約だけが、副問合せによって新たに作成された表にコピーされます。
投稿ツリー
-
問題ID: 8536 NOT NULL制約
(hasimohi, 2018-8-23 15:04)
- Re: 問題ID: 8536 NOT NULL制約 (quensan, 2018-8-23 23:12)
- Re: 問題ID: 8536 NOT NULL制約 (hasimohi, 2018-8-24 13:58)