Ограничения Oracle в основном заключаются в обеспечении целостности данных на уровне бизнес-логики. В основном программисты определяют ограничения в приложении или определяют триггеры для поддержания целостности данных и, наконец, используют собственные ограничения Oracle для поддержания целостности данных. Если вы можете использовать собственные ограничения Oracle для удовлетворения требований, попробуйте использовать собственные ограничения Oracle, поскольку использование пользовательских ограничений, таких как триггеры, повлияет на производительность базы данных. Например: при использовании триггеров таблица будет заблокирована и будет выполняться сканирование таблицы или сканирование индекса, что снизит производительность базы данных и параллелизм.
Ограничения Oracle в основном делятся на следующие типы:
ненулевое ненулевое ограничение, уникальное уникальное ограничение, ограничение первичного ключа первичного ключа, ограничение внешнего ключа внешнего ключа, проверочное ограничение.
ненулевое ненулевое ограничение:
Способ создания: 1. Определить на уровне столбца при создании таблицы (то есть определение ограничения можно написать только после столбца при определении таблицы), 2 метода. Один использует пользовательские имена ограничений, а другой — системные имена по умолчанию.
просмотреть обычную копию в буфер обмена, распечатать?
создать таблицу т
(
ограничение tid number(8) NK_t1 не равно нулю,
tname varchar2(10) не равно нулю
)
создать таблицу т
(
ограничение tid number(8) NK_t1 не равно нулю,
tname varchar2(10) не равно нулю
)
просмотреть обычную копию в буфер обмена, распечатать?
SQL> выберите t.constraint_name, t.table_name, t.status, t.deferrable из user_constraints t;
CONSTRAINT_NAME TABLE_NAME СТАТУС ОТЛОЖЕНО
-------------------------------------------------- ------ ----------------
NK_T1 T ВКЛЮЧЕНО НЕ ОТЛОЖЕНО
SYS_C003735 T ВКЛЮЧЕНО, НЕ ОТЛОЖЕНО
SQL>
SQL> выберите t.constraint_name, t.table_name, t.status, t.deferrable из user_constraints t;
CONSTRAINT_NAME TABLE_NAME СТАТУС ОТЛОЖЕНО
-------------------------------------------------- ------ ----------------
NK_T1 T ВКЛЮЧЕНО НЕ ОТЛОЖЕНО
SYS_C003735 T ВКЛЮЧЕНО, НЕ ОТЛОЖЕНО
SQL>
2. Измените таблицу после ее создания, но убедитесь, что данные в таблице не нарушают ограничений.
просмотреть обычную копию в буфер обмена, распечатать?
SQL> изменить таблицу t изменить tid не нуль;
Таблица изменена
SQL> выберите t.constraint_name, t.table_name, t.status, t.deferrable из user_constraints t;
CONSTRAINT_NAME TABLE_NAME СТАТУС ОТЛОЖЕНО
-------------------------------------------------- ------ ----------------
SYS_C003736 T ВКЛЮЧЕНО, НЕ ОТЛОЖЕНО
SQL>
SQL> изменить таблицу t изменить tid не нуль;
Таблица изменена
SQL> выберите t.constraint_name, t.table_name, t.status, t.deferrable из user_constraints t;
CONSTRAINT_NAME TABLE_NAME СТАТУС ОТЛОЖЕНО
-------------------------------------------------- ------ ----------------
SYS_C003736 T ВКЛЮЧЕНО, НЕ ОТЛОЖЕНО
SQL>
проверить ограничения
Метод создания: его можно определить на уровне таблицы и столбца (его можно определить после определения столбца или после определения столбца). Также есть 2 способа определения.
просмотреть обычную копию в буфер обмена, распечатать?
SQL> создать таблицу t
2 (
3-й номер(8) ,
4 имя varchar2(10),
5 проверка ограничения CK_T1 ((tid не равно нулю) и (tid > 0))
6)
7/
Таблица создана
SQL> изменить таблицу t добавить ограничение CK_T2 check (tname не равно нулю);
Таблица изменена
SQL> выберите t.constraint_name, t.table_name, t.status, t.deferrable из user_constraints t;
CONSTRAINT_NAME TABLE_NAME СТАТУС ОТЛОЖЕНО
-------------------------------------------------- ------ ----------------
CK_T1 T ВКЛЮЧЕНО, НЕ ОТЛОЖЕНО
CK_T2 T ВКЛЮЧЕНО, НЕ ОТЛОЖЕНО
SQL>
SQL> создать таблицу t
2 (
3-й номер(8) ,
4 имя varchar2(10),
5 проверка ограничения CK_T1 ((tid не равно нулю) и (tid > 0))
6)
7/
Таблица создана
SQL> изменить таблицу t добавить ограничение CK_T2 check (tname не равно нулю);
Таблица изменена
SQL> выберите t.constraint_name, t.table_name, t.status, t.deferrable из user_constraints t;
CONSTRAINT_NAME TABLE_NAME СТАТУС ОТЛОЖЕНО
-------------------------------------------------- ------ ----------------
CK_T1 T ВКЛЮЧЕНО, НЕ ОТЛОЖЕНО
CK_T2 T ВКЛЮЧЕНО, НЕ ОТЛОЖЕНО
SQL>
Ограничение CK_T1 гарантирует, что столбец tid не может быть пустым и имеет значение больше 0, а CK_T2 гарантирует, что столбец iname не может быть пустым. Ограничения проверки также могут быть правилами между разными столбцами одной строки.
уникальное ограничение
Метод создания: если уникальный столбец содержит только один столбец, его можно определить на уровне столбца. Если уникальный столбец содержит несколько столбцов, его можно определить только на уровне таблицы.
просмотреть обычную копию в буфер обмена, распечатать?
SQL> создать таблицу t2
2 (
3 ограничения по номеру видео VK_T1, уникальные,
4 vname varchar2(10),
5 всекс varchar2(10),
6 ограничение VK_T2 уникальный (vname,vsex)
7)
8/
Таблица создана
SQL> выберите t.constraint_name, t.table_name, t.status, t.validated, t.deferrable из user_constraints t;
CONSTRAINT_NAME TABLE_NAME СТАТУС ПРОВЕРЕН ОТЛОЖЕНО
--------------- ---------- -------- ---------- ------- -------
VK_T1 T2 ВКЛЮЧЕНО ПРОВЕРЕНО НЕ ОТЛОЖЕНО
VK_T2 T2 ВКЛЮЧЕНО ПРОВЕРЕНО, НЕ ОТЛОЖЕНО
SQL>
SQL> создать таблицу t2
2 (
3 ограничения по номеру видео VK_T1, уникальные,
4 vname varchar2(10),
5 всекс varchar2(10),
6 ограничение VK_T2 уникальный (vname,vsex)
7)
8/
Таблица создана
SQL> выберите t.constraint_name, t.table_name, t.status, t.validated, t.deferrable из user_constraints t;
CONSTRAINT_NAME TABLE_NAME СТАТУС ПРОВЕРЕН ОТЛОЖЕНО
--------------- ---------- -------- ---------- ------- -------
VK_T1 T2 ВКЛЮЧЕНО ПРОВЕРЕНО НЕ ОТЛОЖЕНО
VK_T2 T2 ВКЛЮЧЕНО ПРОВЕРЕНО, НЕ ОТЛОЖЕНО
SQL>
При создании ограничения уникальности будет сгенерирован индекс (это может быть уникальный индекс, поэтому он также может быть неуникальным индексом, в зависимости от того, указана ли таблица при создании таблицы для проверки ограничений данных немедленно при данные вставлены):
просмотреть обычную копию в буфер обмена, распечатать?
SQL> выберите t.index_name, t.table_name, t.uniqueness из user_indexes t;
INDEX_NAME ТАБЛИЦА_ИМЯ УНИКАЛЬНОСТЬ
---------- ---------- ----------
ВК_Т1 Т2 УНИКАЛЬНЫЙ
ВК_Т2 Т2 УНИКАЛЬНЫЙ
SQL> выберите t.index_name, t.table_name, t.uniqueness из user_indexes t;
INDEX_NAME ТАБЛИЦА_ИМЯ УНИКАЛЬНОСТЬ
---------- ---------- ----------
ВК_Т1 Т2 УНИКАЛЬНЫЙ
ВК_Т2 Т2 УНИКАЛЬНЫЙ
Поскольку индекс есть, то при создании таблицы можно указать место хранения индекса и некоторые параметры хранения.
просмотреть обычную копию в буфер обмена, распечатать?
SQL> создать таблицу t2
2 (
3 ограничения по номеру видео VK_T1, уникальные,
4 vname varchar2(10),
5 всекс varchar2(10),
6 ограничение VK_T2 unique(vname,vsex) с использованием индексного табличного пространства indx
7 памяти (начальные 100 КБ, следующие 100 КБ, pctincrease 0)
8 отсутствие регистрации
9)
10/
Таблица создана
SQL> создать таблицу t2
2 (
3 ограничения по номеру видео VK_T1, уникальные,
4 vname varchar2(10),
5 всекс varchar2(10),
6 ограничение VK_T2 unique(vname,vsex) с использованием индексного табличного пространства indx
7 памяти (начальные 100 КБ, следующие 100 КБ, pctincrease 0)
8 отсутствие регистрации
9)
10/
Таблица создана
Табличное пространство, в котором хранится ограниченный индекс, — это табличное пространство indx, начальный размер блока — 100 КБ, и для операций dml журналы не генерируются (но журналы генерируются и по другим причинам, но их меньше, чем журналирование по умолчанию).
ограничение первичного ключа первичного ключа
Метод создания: Первичный ключ в основном состоит из ненулевых и уникальных ключей. Таблица может содержать только один первичный ключ, но первичный ключ может содержать несколько столбцов.
просмотреть обычную копию в буфер обмена, распечатать?
SQL> создать таблицу t2
2 (
3 ограничения по номеру видео VK_T1, уникальные,
4 vname varchar2(10),
5 всекс varchar2(10),
6 ограничение первичного ключа VK_T2 (vname, vsex) с использованием индексного табличного пространства indx
7 памяти (начальные 100 КБ, следующие 100 КБ, pctincrease 0)
8 отсутствие регистрации
9)
10/
Таблица создана
SQL> создать таблицу t2
2 (
3 ограничения по номеру видео VK_T1, уникальные,
4 vname varchar2(10),
5 всекс varchar2(10),
6 ограничение первичного ключа VK_T2 (vname, vsex) с использованием индексного табличного пространства indx
7 памяти (начальные 100 КБ, следующие 100 КБ, pctincrease 0)
8 отсутствие регистрации
9)
10/
Таблица создана
внешний ключ внешний ключ
Метод создания: Таблицы, участвующие во внешнем ключе, могут иметь две или одну таблицу. В случае двух таблиц ключ, на который ссылается поле в дочерней таблице, должен быть первичным ключом в более толстой таблице. Ограничение устанавливается в дочерней таблице, указывая, что значение поля таблицы должно существовать в родительской таблице или иметь значение NULL.
просмотреть обычную копию в буфер обмена, распечатать?
SQL> создать отдел таблицы
2 (
3 сделал номер(8),
4 имени varchar2(20),
5 ограничение первичного ключа PK_DEPT (сделано)
6)
7/
Таблица создана
SQL>
SQL> создать таблицу emp
2 (
3 первичный ключ идентификационного номера (8),
4 переименовать varchar2(20),
5 сделал номер(8) /*отдел рекомендаций(сделал)*/,
6 имя varchar2(20),
7 ограничение FK_EMP2 внешний ключ (сделал) ссылки на отдел (сделал)
8)
9/
Таблица создана
SQL> создать отдел таблицы
2 (
3 сделал номер(8),
4 имени varchar2(20),
5 ограничение первичного ключа PK_DEPT (сделано)
6)
7/
Таблица создана
SQL>
SQL> создать таблицу emp
2 (
3 первичный ключ идентификационного номера (8),
4 переименовать varchar2(20),
5 сделал номер(8) /*отдел рекомендаций(сделал)*/,
6 имя varchar2(20),
7 ограничение FK_EMP2 внешний ключ (сделал) ссылки на отдел (сделал)
8)
9/
Таблица создана
Поскольку внешний ключ (внешний ключ) определяется ссылочным ключом (ссылочным ключом), будут ограничения при выполнении обновления, удаления, удаления и других операций над таблицей Fater. В частности, это определяется статусом ограничений внешнего ключа.
удалить по действию, удалить каскад, удалить набор null
Удалить при действии является настройкой по умолчанию. Если вы удалите данные в таблице Fater, Oracle заблокирует таблицу слов, а затем просканирует таблицу (если есть столбец внешнего ключа, просканируйте индекс), и тогда данные не будут существовать в ней. столбец внешнего ключа в дочерней таблице разрешен.
Каскад удаления также удаляет соответствующую строку в таблице слов.
delete set null, данные, соответствующие столбцу внешнего ключа в столбчатой таблице, становятся NULL.
просмотреть обычную копию в буфер обмена, распечатать?
создать таблицу emp
(
первичный ключ eid (8),
переименовать varchar2(20),
сделал номер(8) /*отдел ссылок(сделал)*/,
имя имени varchar2 (20),
ограничение внешнего ключа FK_EMP2 (did) ссылается на dept (did) при удалении, установленное на ноль
)
создать таблицу emp
(
первичный ключ eid (8),
переименовать varchar2(20),
сделал номер(8) /*отдел ссылок(сделал)*/,
имя имени varchar2(20),
ограничение внешнего ключа FK_EMP2 (did) ссылается на dept (did) при удалении, установленное на ноль
)