問題:
Oracleのテーブルの制約のデフォルト名を知りたい。
例:
データベースに、country
およびstudent
、次の制約があります:PRIMARY KEY
(テーブルの列ID country
およびstudent
)、FOREIGN KEY
(列country_id
テーブル内student
)、DEFAULT
(列name
テーブル内student
)、UNIQUE
(列name
テーブル内country
および列personal_number
テーブル内student
)、およびCHECK
(列age
テーブル内student
。
解決策:
CREATE TABLE country ( id int NOT NULL primary key, name varchar(100) UNIQUE ); CREATE TABLE student ( id int NOT NULL primary key, name varchar(100) DEFAULT 'UNKNOWN', personal_number varchar(100) UNIQUE, age int CHECK(age>15), country_id int, FOREIGN KEY(country_id) references country(id) );
Oracleがデフォルトでこれらのテーブルの制約にどのように名前を付けるかを表示してみましょう。このクエリを使用してそれらを確認します:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
結果は次のとおりです。
CONSTRAINT_NAME | CONSTRAINT_TYPE | TABLE_NAME |
---|---|---|
SYS_C007376 | R | 学生 |
SYS_C007366 | P | 国 |
SYS_C007374 | P | 学生 |
SYS_C007367 | U | 国 |
SYS_C007375 | U | 学生 |
SYS_C007372 | C | 学生 |
ディスカッション:
テーブルを作成するときに、いくつかの列に制約を設定します。ただし、これらの制約の名前は指定していないため、デフォルトで名前が付けられています。制約のデフォルト名はどのように生成されますか?
Oracleでは、デフォルトの制約名はユーザー名で始まり、その後に「_C
」が続きます。 ’とシーケンス番号。制約のタイプは「C
」です。 ’(check
)、‘P
」(主キー)、「U
」(一意性制約)、および「R
' (外部キー)。デフォルトの制約名はすべて「SYS
」として生成されます ’、‘ _
’、および番号。上の表でデフォルトの名前を確認できます。たとえば、CHECK
student
テーブルの名前はSYS_C007372
です。 。