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
.