問題ID: 8536 NOT NULL制約

  • フォーラムは新サイトへ移行しました。
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2018-8-23 15:04
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制約が適用されるのではないでしょうか?
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2018-8-23 23:12
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制約だけが、副問合せによって新たに作成された表にコピーされます。
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2018-8-24 13:58
hasimohi  常連   投稿数: 14
ご回答ありがとうございました。

  >フォーラム検索へ


Copyright (c) 2020 Ping-t All rights reserved.