SQL> CREATE TABLE sample
2 (first NUMBER, second NUMBER,
3 CONSTRAINT sample_first_second_uk UNIQUE (first, second));
Table created.
столбец тип_данных [CONSTRAINT имя_ограничения] NOT NULL
§ Запрещает неопределенные значения в столбце
§ Ограничение может быть задано на уровне столбца
SQL> CREATE TABLE sample
2 (first NUMBER CONSTRAINT sample_first_nn NOT NULL);
Table created.
столбец тип_данных [CONSTRAINT имя_ограничения] UNIQUE
§ Определяет один или более столбцов, как уникальный ключ
§ Ограничение может быть задано на уровне столбца и на уровне таблицы
§ Для уникального ключа автоматически создается индекс
§ Допускает неопределенные значения
SQL> CREATE TABLE sample
2 (first NUMBER CONSTRAINT sample_first_uk UNIQUE,
3 second NUMBER);
Table created.
SQL> INSERT INTO sample VALUES (1, 2);
1 row created.
SQL> INSERT INTO sample VALUES (1, 3);
INSERT INTO sample VALUES (1, 3)
*
ERROR at line 1:
ORA-00001: unique constraint (SYSTEM.SAMPLE_FIRST_UK) violated
столбец тип_данных [CONSTRAINT имя_ограничения] PRIMARY KEY
§ Создает первичный ключ таблицы. Первичный ключ в таблице может быть только один.
§ Может быть задан на уровне столбца и на уровне таблицы
§ Для первичного ключа автоматически создается индекс
§ Гарантирует отсутствие неопределенных значений в столбцах и уникальность значений
SQL> CREATE TABLE sample
2 (first NUMBER CONSTRAINT sample_first_pk PRIMARY KEY,
3 second NUMBER);
Table created.
SQL> INSERT INTO sample VALUES (1, 2);
1 row created.
Если Вы попытаетесь вставить строку, в которой опущено значение для столбца первичного ключа или значение повторяется, сервер Oracle вернет ошибку:
SQL> INSERT INTO sample (second) VALUES (2);
INSERT INTO sample (second) VALUES (2)
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SYSTEM"."SAMPLE"."FIRST")
SQL> INSERT INTO sample VALUES (1, 5);
INSERT INTO sample VALUES (1, 5)
*
ERROR at line 1:
ORA-00001: unique constraint (SYSTEM.SAMPLE_FIRST_PK) violated
столбец тип_данных [CONSTRAINT имя_ограничения] REFERENCES имя_таблицы (столбец, …)
§ Задает один или более столбцов в качестве внешнего ключа
§ Устанавливает связь с первичным или уникальным ключом другой или той же самой таблицы
§ Может быть задан на уровне столбца или уровне таблицы
§ Значение внешнего ключа должно совпадать со значением первичного или уникального ключа или быть неопределенным
SQL> SELECT * FROM sample;
FIRST SECOND
--------- ---------
1 2
3
SQL> CREATE TABLE sample_ref
2 (first NUMBER CONSTRAINT sample_ref_first_fk REFERENCES sample (first),
3 name VARCHAR2(20));
Table created.
SQL> INSERT INTO sample_ref VALUES (1, 'First name');
1 row created.
Вставка строки, значение внешнего ключа в которой не задано, допускается, если внешний ключ не является частью первичного ключа:
SQL> INSERT INTO sample_ref (name) VALUES ('Second name');
1 row created.
Если Вы попытаетесь вставить строку, значение внешнего ключа в которой задано, но не совпадает ни с одним значением первичного ключа в родительской таблице, сервер Oracle вернет ошибку:
SQL> INSERT INTO sample_ref VALUES (4, 'Fourth name');
INSERT INTO sample_ref VALUES (4, 'Fourth name')
*
ERROR at line 1:
ORA-02291: integrity constraint (SYSTEM.SAMPLE_REF_FIRST_FK) violated - parent key not found
По умолчанию строка родительской таблицы не может быть удалена, если в дочерней таблице присутствует ссылка на нее:
SQL> SELECT * FROM sample;
FIRST SECOND
--------- ---------
1 2
3
SQL> SELECT * FROM sample_ref;
FIRST NAME
--------- --------------------
1 First name
3 Third name
SQL> DELETE FROM sample WHERE first=1;
DELETE FROM sample WHERE first=1
*
ERROR at line 1:
ORA-02292: integrity constraint (SYSTEM.SAMPLE_REF_FIRST_FK) violated - child record found
Задайте параметр ON DELETE CASCADE при добавлении ограничения внешней ссылки. В этом случае при удалении строки родительской таблицы зависимые строки тоже будут удалены.
столбец тип_данных [CONSTRAINT имя_ограничения]
REFERENCES имя_таблицы (столбец, …) ON DELETE CASCADE
столбец тип_данных [CONSTRAINT имя_ограничения] CHECK (условие)
§ Определяет условие, которому должна удовлетворять каждая строка
§ Условие может содержать те же выражения, что и запросы, кроме
§ ссылок на псевдостолбцы
§ вызовов функций SYSDATE, USER
§ запросов со ссылками на значения в других строках
§ Может быть задано на уровне столбца или на уровне таблицы
SQL> CREATE TABLE sample
2 (first NUMBER CONSTRAINT sample_first_ck CHECK (first>1000));
Table created.
SQL> INSERT INTO sample VALUES (1500);
1 row created.
SQL> INSERT INTO sample VALUES (900);
INSERT INTO sample VALUES (900)
*
ERROR at line 1:
ORA-02290: check constraint (SYSTEM.SAMPLE_FIRST_CK) violated
Таблицы базы данных создаются на этапе кодирования и документирования цикла разработки системы. Таблицы создаются на основе бланков экземпляров таблиц, созданных во время физического проектирования базы данных.
СОТРУДНИК
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.