問題:
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です。 。