Problem:
Chcesz poznać domyślne nazwy ograniczeń w tabeli w Oracle.
Przykład:
W naszej bazie danych tworzymy dwie tabele, country i student , z następującymi ograniczeniami:PRIMARY KEY (identyfikator kolumny w tabelach country i student ), FOREIGN KEY (kolumna country_id w tabeli student ), DEFAULT (kolumna name w tabeli student ), UNIQUE (kolumna name w tabeli country i kolumna personal_number w tabeli student ) i CHECK (kolumna age w tabeli student ).
Rozwiązanie:
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) );
Pokażmy, jak Oracle domyślnie nazywa ograniczenia tych tabel. Użyj tego zapytania, aby je zobaczyć:
select CONSTRAINT_NAME, CONSTRAINT_TYPE, TABLE_NAME from USER_CONSTRAINTS where TABLE_NAME='STUDENT' OR TABLE_NAME='COUNTRY';
Oto wynik:
| CONSTRAINT_NAME | CONSTRAINT_TYPE | TABLE_NAME |
|---|---|---|
| SYS_C007376 | R | STUDENT |
| SYS_C007366 | P | KRAJ |
| SYS_C007374 | P | STUDENT |
| SYS_C007367 | U | KRAJ |
| SYS_C007375 | U | STUDENT |
| SYS_C007372 | C | STUDENT |
Dyskusja:
Kiedy tworzymy nasze tabele, ustawiamy ograniczenia dla niektórych kolumn. Jednak nie określamy nazw tych ograniczeń, więc są one nazywane domyślnie. Jak generowane są domyślne nazwy ograniczeń?
W Oracle domyślna nazwa ograniczenia zaczyna się od nazwy użytkownika, po której następuje „_C ’ i numer kolejny. Typy ograniczeń to „C ’ (check ), ‘P ’ (klucz podstawowy), ‘U ” (unikalne ograniczenie) i „R ’ (klucz obcy). Wszystkie domyślne nazwy ograniczeń są generowane jako „SYS ”, „_ ’ i numer. Możesz zobaczyć nazwy domyślne w powyższej tabeli. Na przykład CHECK ograniczenie wieku kolumny w student tabela ma nazwę SYS_C007372 .