Проблем:
Искате да знаете имената по подразбиране на ограниченията в таблица в Oracle.
Пример:
В нашата база данни създаваме две таблици, country
и student
, със следните ограничения:PRIMARY KEY
(идентификаторът на колоната в таблиците 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
.