Ограничение оракула, что это такое

Обновлено: 21.11.2024

В этом руководстве по Oracle объясняется, как использовать проверочные ограничения в Oracle с синтаксисом и примерами.

Что такое проверочное ограничение в Oracle?

Проверочное ограничение позволяет указать условие для каждой строки в таблице.

  • Проверочное ограничение НЕ МОЖЕТ быть определено в представлении SQL.
  • Проверочное ограничение, определенное для таблицы, должно относиться только к столбцам этой таблицы. Он не может ссылаться на столбцы в других таблицах.
  • Проверочное ограничение НЕ МОЖЕТ включать подзапрос SQL.
  • Проверочное ограничение может быть определено либо в операторе SQL CREATE TABLE, либо в операторе SQL ALTER TABLE.

Использование инструкции CREATE TABLE

Синтаксис для создания проверочного ограничения с помощью инструкции CREATE TABLE в Oracle:

Ключевое слово DISABLE указывать необязательно. Если вы создадите проверочное ограничение с помощью ключевого слова DISABLE, ограничение будет создано, но условие не будет применено.

Пример

В этом первом примере мы создали контрольное ограничение для таблицы поставщиков с именем check_supplier_id. Это ограничение гарантирует, что поле supplier_id содержит значения от 100 до 9999.

В этом втором примере мы создали контрольное ограничение с именем check_supplier_name. Это ограничение гарантирует, что столбец supplier_name всегда будет содержать символы верхнего регистра.

Использование инструкции ALTER TABLE

Синтаксис для создания проверочного ограничения в операторе ALTER TABLE в Oracle:

Ключевое слово DISABLE указывать необязательно. Если вы создадите проверочное ограничение с помощью ключевого слова DISABLE, ограничение будет создано, но условие не будет применено.

Пример

В этом примере мы создали контрольное ограничение для существующей таблицы поставщиков с именем check_supplier_name. Это гарантирует, что поле supplier_name содержит только следующие значения: IBM, Microsoft или NVIDIA.

Отменить контрольное ограничение

Синтаксис для удаления контрольного ограничения:

Пример

В этом примере мы удаляем контрольное ограничение для таблицы поставщиков с именем check_supplier_id.

Включить контрольное ограничение

Синтаксис включения проверочного ограничения в Oracle:

Пример

В этом примере мы включаем ограничение проверки для таблицы поставщиков с именем check_supplier_id.

Отключить контрольное ограничение

Синтаксис отключения контрольного ограничения в Oracle:

Пример

В этом примере мы отключаем контрольное ограничение для таблицы поставщиков под названием check_supplier_id.

Давайте рассмотрим каждый из них более подробно.

Проверить ограничения

Проверка ограничений подтверждает, что значения в заданном столбце соответствуют определенным критериям. Например, вы можете создать контрольное ограничение для столбца varchar2, чтобы он мог содержать только значения T или F, как в этом примере:

Создать таблицу my_status
( status_id NUMBER PRIMARY KEY,
person_id NUMBER NOT NULL,
active_record VARCHAR2(1) NOT NULL
CHECK (UPPER(active_record)='T' или
UPPER(active_record)='F'),
person_ssn VARCHAR2(20) CONSTRAINT un_person_ssn UNIQUE
);

В этом примере мы создали таблицу с именем MY_STATUS с помощью команды создания таблицы. Обратите внимание на ключевое слово ограничения, оно указывает на то, что мы готовимся определить ограничение. Напомним, ранее в этой главе мы обсуждали встроенные и внешние ограничения. Этот конкретный пример известен как встроенное ограничение, поскольку ограничение определяется в той же строке, что и определяемый столбец.

Если вам нужно добавить контрольное ограничение в таблицу постфактум, просто используйте команду alter table. Вот пример:

ALTER TABLE my_status ADD (CONSTRAINT ck_stats_01
CHECK (UPPER(active_record)='T' или
UPPER(active_record)='F') );

Ограничения NOT NULL — это встроенные ограничения, которые указывают, что столбец не может содержать значения NULL. Предыдущий пример создания таблицы MY_STATUS содержал два примера определения ограничений NOT NULL. Например, в этом примере столбец PERSON_ID определен как NOT NULL.

Если вам нужно добавить ограничение NOT NULL в таблицу постфактум, просто используйте команду alter table, как в этом примере:

ALTER TABLE my_status MODIFY (person_id NOT NULL);

Ограничения первичного ключа определяют столбец или серию столбцов, которые однозначно идентифицируют данную строку в таблице. Определение первичного ключа для таблицы необязательно, и вы можете определить только один первичный ключ для таблицы. Ограничение первичного ключа может состоять из одного или нескольких столбцов (до 32). Любой столбец, определенный как столбец первичного ключа, автоматически получает статус NOT NULL.

Предыдущий пример создания таблицы MY_STATUS включал определение столбца STATUS_ID в качестве первичного ключа этой таблицы с помощью ключевого слова первичного ключа.

Если вам нужно привязать первичный ключ к таблице постфактум, просто используйте команду alter table.

ИЗМЕНИТЬ ТАБЛИЦУ my_status ДОБАВИТЬ ОГРАНИЧЕНИЕ pk_my_status
ПЕРВИЧНЫЙ КЛЮЧ (status_id);

Уникальные ограничения аналогичны альтернативным ограничениям первичного ключа. Ограничение уникальности определяет столбец или серию столбцов, значение которых должно быть уникальным. У вас может быть определено несколько уникальных ограничений, и столбцы могут иметь в них значения NULL, в отличие от столбца, который принадлежит ограничению первичного ключа. Если вам нужно добавить ограничения уникальных ключей в таблицу постфактум, просто используйте команду alter table.

ИЗМЕНИТЬ ТАБЛИЦУ
my_status
ДОБАВИТЬ ОГРАНИЧЕНИЕ
uk_my_status
УНИКАЛЬНО
(status_id,
person_id);

Ограничение внешнего ключа используется для обеспечения связи между двумя таблицами. В качестве примера возьмем две таблицы, ITEM и PART. Эти таблицы имеют отношение (у элемента может не быть ни одной части, одна или несколько частей). Ограничения внешнего ключа помогают обеспечить соблюдение этих отношений. В мире администраторов баз данных мы используем диаграммы, называемые диаграммами отношений сущностей (ERD), чтобы визуально показать, как связаны таблицы. Вот ERD, который показывает, как соотносятся таблицы ITEM и PART.

Обратите внимание, что таблицы ITEM и PART представлены в виде двух рамок. Между ними есть линия. Теперь обратите внимание на две строки из таблицы PART в основную строку между таблицами ITEM и PART. Мы называем это «гусиными лапками». Когда вы видите гусиные лапки, это означает, что между таблицами существует связь один ко многим.

На приведенной выше диаграмме между таблицами ITEM и PART существует связь "один ко многим". У предмета может не быть частей, предназначенных для его сборки (возможно, он новый и находится в разработке), или у него может быть одна или несколько частей, которые используются для сборки этой части. Обратите внимание на круг в верхней части гусиных лапок. Поскольку он не заполнен, это означает, что в таблице деталей может не быть деталей. Если бы кружок был затемнен, это означало бы, что с каждым элементом должна быть связана хотя бы одна часть.

Итак, как это связано с ограничениями внешнего ключа? Что ж, ограничения внешнего ключа помогают обеспечить соблюдение типов отношений между таблицами, которые мы только что продемонстрировали. В этом примере мы создадим таблицы ITEM и PART. В процессе этого мы создадим отношение внешнего ключа между ними:

В этом примере нас действительно интересует создание таблицы ITEM. Во-первых, обратите внимание, что мы определили первичный ключ как нестандартный первичный ключ. Это связано с тем, что это составной первичный ключ, а составные первичные ключи должны быть определены вне очереди.

Теперь нас интересует определение внешнего ключа. Вы должны определить ограничения внешнего ключа как внешние ограничения, как мы сделали в нашем примере. Вот фрагмент команды, которую мы использовали:

ОГРАНИЧЕНИЕ fk_item_part ВНЕШНИЙ КЛЮЧ (part_no) ССЫЛКИ часть (part_no);

Обратите внимание, что мы начинаем с ключевого слова ограничения. Это сообщает Oracle, что мы собираемся определить ограничение. Затем мы называем ограничение. В данном случае мы назвали ограничение FK_ITEM_PART. Имена ограничений должны быть уникальными для каждой таблицы и могут содержать не более 30 символов. Затем мы используем ключевое слово внешнего ключа, чтобы указать, что мы определяем ограничение внешнего ключа. Затем мы определяем столбец в создаваемой таблице, которому принадлежит этот внешний ключ.

Далее мы используем ключевое слово references, чтобы указать, что мы собираемся определить таблицу и столбец, на которые ссылается этот внешний ключ. Имя ссылочной таблицы указано следующим. В данном случае это таблица PART. Наконец, указан столбец в таблице PART, на который делается ссылка, PART_NO.

ИЗМЕНИТЬ ТАБЛИЦУ my_status ДОБАВИТЬ ОГРАНИЧЕНИЕ fk_my_status
ВНЕШНИЙ КЛЮЧ (part_no) REFERENCES часть (part_no);

Это отрывок из бестселлера Easy Oracle Jumpstart Роберта Фримана и Стива Карама (Oracle ACE и Oracle Certified Master). Это всего 19,95 долларов США при покупке напрямую у издателя здесь.

Бурлесон — американская команда

Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.

Проверьте опыт! Любой, кто рассматривает возможность использования услуг эксперта службы поддержки Oracle, должен самостоятельно проверить свои полномочия и опыт, а не полагаться на рекламу и самопровозглашенный опыт. Все законные эксперты Oracle публикуют свои квалификации Oracle.

Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle.Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:

и укажите URL-адрес страницы.


Burleson Consulting

Оракул поддержки баз данных

Предложение Oracle Constraints обеспечивает целостность данных, которые используются приложением из базы данных, применяя определенные правила или условия к столбцу таблицы базы данных, которые определяют очень простой поведенческий слой для столбца этой конкретной таблицы. чтобы проверить неприкосновенность данных, поступающих в него, например, ограничение NOT NULL в столбце не позволит каким-либо данным этого столбца быть NULL, поскольку оно не позволит пользователям вставлять данные NULL в столбец.

Типы ограничений Oracle

У Oracle есть несколько типов ограничений для разных целей. В этом разделе мы рассмотрим различные типы ограничений в Oracle.

Hadoop, наука о данных, статистика и др.

1. НЕ НУЛЕВОЕ

Если мы просто добавим столбец, по умолчанию столбец может содержать значения NULL, но в случае, если есть требование, чтобы столбец не содержал никаких значений NULL. Мы можем использовать ограничение NOT NULL для этого конкретного столбца. Это заставит столбец всегда иметь значение и не позволит добавить в столбец какую-либо запись NULL. Мы добавим ограничение NOT NULL, используя ограничения CREATE TABLE и ALTER TABLE. Мы создадим таблицу STUDENT со столбцами student_id, LastName и zfirstName, имеющими ограничение NOT NULL.

Давайте посмотрим на запрос.

Запрос:

CREATE TABLE STUDENT (
student_id int NOT NULL,
Имя varchar(255) NOT NULL,
Фамилия varchar(255) NOT NULL,
Возраст int
);

Теперь выполним запрос в SQL Developer и посмотрим на результат.

Вывод:

Как видно из приведенного выше снимка экрана, мы успешно создали таблицу с ограничениями NOT NULL. Давайте теперь посмотрим на запрос инструкции ALTER, чтобы добавить ограничение NOT NULL в столбец age таблицы STUDENT TABLE.

Запрос:

ALTER TABLE STUDENT MODIFY AGE int NOT NULL;
desc СТУДЕНТ;

Теперь запустим запрос в SQL Developer.

Вывод:

Как видно из вывода, к столбцу AGE теперь добавлено ограничение NOT NULL.

2. УНИКАЛЬНЫЙ

Это ограничение в Oracle гарантирует, что все значения столбца отличаются друг от друга и не имеют дубликатов. Мы снова будем использовать два примера, чтобы понять. Сначала с помощью инструкции CREATE, а затем с помощью инструкции ALTER. Мы создадим таблицу STUDENT со student_id с ограничением UNIQUE.

Давайте рассмотрим запрос с помощью инструкции CREATE TABLE.

Запрос:

CREATE TABLE student (
student_id int NOT NULL UNIQUE,
FirstName varchar(25) NOT NULL,
LastName varchar(25),
Age int
) ;

Давайте теперь запустим приведенный выше запрос в SQL Developer.

Вывод:

Как мы видим, к столбцам таблицы добавлено ограничение UNIQUE. Теперь давайте добавим ограничение UNIQUE в столбец age с помощью инструкции ALTER TABLE.

Запрос:

ИЗМЕНИТЬ ТАБЛИЦУ УЧАЩИХСЯ, ДОБАВИТЬ УНИКАЛЬНЫЙ (возраст);

Давайте запустим этот запрос в SQL Developer.

Вывод:

Как мы видим, таблица student была успешно изменена.

3. ПЕРВИЧНЫЙ КЛЮЧ

Ограничение первичного ключа однозначно описывает каждое значение столбца. Дубликаты или значения NULL не допускаются. Важным моментом является то, что таблица может иметь только один первичный ключ, который сам по себе может быть комбинацией одного или нескольких полей.

Сначала мы создадим таблицу «student» со student_id в качестве первичного ключа с помощью оператора CREATE TABLE.

Запрос:

CREATE TABLE STUDENT (
student_id int PRIMARY KEY,
Имя varchar(255) NOT NULL,
Фамилия varchar(255),
Возраст int
);

Теперь давайте запустим запрос в SQL Developer и проверим результат.

Обучение Oracle (14 курсов, 8+ проектов) 14 онлайн-курсов | 8 практических проектов | 120+ часов | Поддающийся проверке сертификат об окончании | Пожизненный доступ
4,5 (8 471 оценка)

Вывод:

Как мы видим, таблица STUDENT успешно создана. Давайте теперь добавим первичный ключ с помощью оператора ALTER TABLE в столбец student_id после создания таблицы STUDENT.

Запрос:

ИЗМЕНИТЬ ТАБЛИЦУ СТУДЕНТА
ДОБАВИТЬ ПЕРВИЧНЫЙ КЛЮЧ (student_id);

Теперь запустим запрос в SQL Developer и проверим результат.

Вывод:

Как мы видим, таблица STUDENT была успешно изменена.

4. Ограничения ВНЕШНЕГО КЛЮЧА

Внешний ключ — это поле, которое ссылается на ПЕРВИЧНЫЙ КЛЮЧ другой таблицы, а таблица, которая фактически имеет внешний ключ, называется дочерней таблицей. Давайте теперь создадим порядок таблиц, в котором столбец student_id является внешним ключом, ссылающимся на столбец student_id таблицы student, используя оператор CREATE TABLE.

Запрос:

CREATE TABLE Orders(
OrderID int PRIMARY KEY,
OrderNumber int NOT NULL,
student_id int REFERENCES student(student_id)
);

Давайте теперь запустим запрос в SQL Developer и посмотрим на результат.

Вывод:

Как мы видим, таблица заказов успешно создана. Теперь мы воспользуемся оператором ALTER TABLE, чтобы добавить внешний ключ в столбец student_id таблицы заказов.

Запрос:

ИЗМЕНИТЬ ТАБЛИЦУ Заказов
ДОБАВИТЬ ВНЕШНИЙ КЛЮЧ (student_id) ССЫЛКИ student(student_id);

Давайте запустим запрос в SQL Developer и посмотрим на результат.

Вывод:

Как мы видим, порядок столов был успешно изменен.

5. ПРОВЕРИТЬ ограничение

Ограничение CHECK используется для ограничения значения диапазона, которое может быть помещено в столбец. Если мы хотим ограничить определенные значения в столбце или таблице, мы вводим ограничение проверки. Мы введем ограничение CHECK, используя инструкции CREATE TABLE и ALTER TABLE.

Мы собираемся создать таблицу student со столбцом age с проверочным ограничением.

Запрос:

CREATE TABLE student (
student_id int NOT NULL,
FirstName varchar(25) NOT NULL,
LastName varchar(25),
Age int CHECK (Age>=18) )
);

Давайте запустим запрос в SQL Developer и посмотрим на результат.

Вывод:

Как мы видим, таблица успешно создана с ограничением CHECK. Давайте теперь добавим ограничение CHECK для того же столбца после того, как таблица student была создана с помощью инструкции ALTER TABLE.

Запрос:

ИЗМЕНИТЬ СТОЛ студент ДОБАВИТЬ ПРОВЕРКУ (Возраст>=19);

Давайте теперь запустим запрос в SQL Developer и посмотрим на результат.

Вывод:

Как мы видим, ограничение CHECK было добавлено в таблицу.

Рекомендуемые статьи

Это руководство по ограничениям Oracle. Здесь мы обсуждаем определение ограничений в базе данных Oracle. Мы также обсудили различные типы, которые можно использовать в базе данных Oracle, вместе с примерами. Вы также можете просмотреть наши рекомендуемые статьи, чтобы узнать больше –

Вывод: в этом руководстве вы узнаете, как использовать проверочное ограничение Oracle для обеспечения целостности домена.

Введение в ограничение Oracle Check

Проверочное ограничение Oracle позволяет обеспечить целостность домена, ограничивая значения, принимаемые одним или несколькими столбцами.

Чтобы создать проверочное ограничение, вы определяете логическое выражение, которое возвращает значение true или false. Oracle использует это выражение для проверки данных, которые вставляются или обновляются. Если выражение оценивается как истинное, Oracle принимает данные и выполняет вставку или обновление. В противном случае Oracle отклонит данные и вообще не вставит или не обновит их.

Вы можете применить проверочное ограничение к столбцу или группе столбцов. Столбец может иметь одно или несколько проверочных ограничений.

При применении нескольких проверочных ограничений к столбцу убедитесь, что они не исключают друг друга. Кроме того, вы не должны предполагать какой-то определенный порядок вычисления выражений.

Создание синтаксиса ограничения проверки

Обычно проверочное ограничение для столбца создается при создании таблицы:

В этом синтаксисе проверочное ограничение состоит из ключевого слова CHECK, за которым следует выражение в круглых скобках. Выражение всегда должно включать столбец, ограниченный таким образом. В противном случае ограничение проверки не имеет смысла.

Если вы хотите присвоить проверочному ограничению явное имя, используйте приведенное ниже предложение CONSTRAINT:

Если проверочное ограничение находится в той же строке, что и столбец таблицы, его синтаксис называется встроенным ограничением.

Кроме того, вы можете использовать синтаксис внешнего ограничения следующим образом:

Создание примеров ограничений Oracle Check

В следующем примере создается таблица деталей с положительными ценами покупки:

Попытка вставить 0 или отрицательную цену покупки вызовет ошибку:

Oracle выдал следующую ошибку:

В этом сообщении об ошибке SYS_C0010681 — это имя проверочного ограничения, назначенного Oracle, а OT — это имя схемы.

Чтобы лучше проанализировать сообщение об ошибке и обратиться к ограничению позже, вы можете дать проверочному ограничению явное имя:

Теперь, если вы попытаетесь вставить деталь с отрицательной ценой:

Сообщение об ошибке более точное:

Добавить контрольное ограничение в таблицу

Чтобы добавить проверочное ограничение в существующую таблицу, используйте оператор ALTER TABLE ADD CONSTRAINT следующим образом:

Например, следующий оператор добавляет столбец стоимости в таблицу деталей:

Предположим, что стоимость должна быть положительной, а также больше или равна цене покупки. Чтобы обеспечить соблюдение этих правил, вы добавляете два контрольных ограничения в таблицу частей:

Удалить ограничение проверки

Чтобы удалить контрольное ограничение, используйте оператор ALTER TABLE DROP CONSTRAINT следующим образом:

Например, чтобы снять ограничение check_valid_cost, используйте следующий оператор:

Отключить/включить проверочное ограничение

Следующие операторы отключают и включают контрольное ограничение:

Например, чтобы временно отключить ограничение check_positive_buy_price, используйте следующую инструкцию:

И чтобы включить ограничение check_positive_buy_price:

Ограничения проверки Oracle

На ограничения проверки Oracle распространяются следующие ограничения:

  1. Вы можете определить проверочные ограничения только для таблиц, но не для представлений.
  2. Выражение ограничения проверки может ссылаться на любой столбец в таблице, но не может ссылаться на столбцы других таблиц.
  3. Выражение также не может содержать одну из следующих конструкций:
    • Недетерминированные функции, такие как SYSDATE , CURRENT_DATE и CURRENT_TIMESTAMP .
    • Подзапросы или скалярные выражения подзапроса.
    • Вызов любых пользовательских функций.
    • Вложенные столбцы или атрибуты таблицы.
    • Псевдостолбцы CURRVAL , NEXTVAL , LEVEL или ROWNUM .
    • Константы даты, которые не указаны полностью.

В этом руководстве вы узнали, как использовать проверочное ограничение Oracle, чтобы указать, что значения в определенном столбце или группе столбцов должны удовлетворять выражению.

Читайте также: