Constraint oracle что это

Обновлено: 05.07.2024

SQL CONSTRAINTS - это целостность, которая определяет некоторые условия, которые не позволяют столбцу оставаться истинным при вставке, обновлении или удалении данных в столбце. Ограничения могут быть указаны, когда таблица создается сначала с помощью оператора CREATE TABLE или во время изменения структуры существующей таблицы с помощью инструкции ALTER TABLE.

SQL CONSTRAINTS используются для реализации правил таблицы. Если какое-либо нарушение ограничений вызвало какое-либо действие, не выполняющееся над таблицей, действие отменяется ограничением.

Некоторые CONSTRAINTS могут использоваться вместе с оператором SQL CREATE TABLE.

Общая структура SQL CONSTRAINT определяется как:

За ключевым словом CONSTRAINT следует имя ограничения, за которым следует столбец или список столбцов.

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

SQL предоставляет следующие типы ограничений:

скованность Описание
НЕНУЛЕВОЙ Это ограничение подтверждает, что столбец не может хранить значение NULL.
УНИКАЛЬНАЯ Это ограничение гарантирует, что каждая строка для столбца должна иметь различное значение.
ОСНОВНОЙ КЛЮЧ Это ограничение является комбинацией ограничения NOT NULL и ограничения UNIQUE. Это ограничение гарантирует, что конкретный столбец или комбинация из двух или более столбцов для таблицы имеют уникальную идентификацию, которая помогает легче и быстрее найти конкретную запись в таблице.
ПРОВЕРЯТЬ Проверочное ограничение гарантирует, что значение, хранящееся в столбце, соответствует определенному условию.
ДЕФОЛТ Это ограничение предоставляет значение по умолчанию, если для этого столбца указано значение none.
ИНОСТРАННЫЙ КЛЮЧ Ограничение внешнего ключа используется для обеспечения ссылочной целостности данных. в одной таблице, чтобы сопоставить значения в другой таблице.

Синтаксис:

Параметры:

название Описание
table_name Имя таблицы, в которой хранятся данные.
column1, column2 Наименование столбцов таблицы.
тип данных Char, varchar, integer, decimal, date и многое другое.
размер Максимальная длина столбца таблицы.
ограничение Ограничение для столбца или таблицы.

Содержание:

  • SQL CREATE TABLE с ограничением для исключения значения NULL
  • SQL CREATE TABLE для проверки уникального значения
  • SQL CREATE TABLE для проверки уникального значения на нескольких столбцах
  • SQL CREATE TABLE с уникальным ограничением
  • SQL CREATE TABLE с ограничением CHECK
  • SQL CREATE TABLE с использованием ограничения по умолчанию
  • SQL CREATE TABLE с использованием значений по умолчанию и CHECK CONSTRAINT
  • SQL CREATE TABLE с оператором CHECK CONSTRAINT и IN
  • SQL CREATE TABLE с оператором CHECK CONSTRAINT и LIKE
  • SQL CREATE TABLE с оператором CHECK CONSTRAINT и OR
  • SQL CREATE TABLE с использованием оператора CHECK CONSTRAINT и AND OR
  • SQL CREATE TABLE с использованием CASCADE

SQL CREATE TABLE с ограничением для исключения значения NULL

В следующем разделе будет описано, как NOT NULL CONSTRAINT подтверждает, что столбец не может иметь значение NULL в инструкции CREATE TABLE.

Пример:

В следующем примере создается таблица. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ
agent_code голец 6 нет
имя агента голец 25 нет
рабочая область голец 25 нет

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

SQL CREATE TABLE для проверки уникального значения

В следующем разделе мы обсудим, как SQL UNIQUE CONSTRAINT гарантирует, что каждая строка для столбца имеет разные значения в операторе CREATE TABLE.

Пример:

В следующем примере создается таблица. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
ord_num десятичный 6 нет УНИКАЛЬНАЯ
ord_amount десятичный 12 2 да
ord_date Дата нет
cust_code голец 6 нет
agent_code голец 6 нет

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

SQL CREATE TABLE для проверки уникального значения на нескольких столбцах

В следующем примере создается таблица. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 нет
комиссия десятичный 5 2 да

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

SQL CREATE TABLE с уникальным ограничением

Ограничение SQL UNIQUE используется для обеспечения того, чтобы каждая строка столбца имела различное значение. На этой странице мы собираемся обсудить, как работает SQL UNIQUE CONSTRAINT, если он используется в конце инструкции CREATE TABLE вместо использования UNIQUE CONSTRAINT в определенных столбцах.

Пример :

В следующем примере создается таблица. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
cust_code голец 6 нет УНИКАЛЬНАЯ
CUST_NAME голец 25 нет
cust_city голец 25 нет
класс целое число да
agent_code голец 6 нет УНИКАЛЬНАЯ

можно использовать следующий оператор SQL :

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

SQL CREATE TABLE с ограничением CHECK

SQL CHECK CONSTRAINT гарантирует, что значение для определенного столбца или столбцов удовлетворяет заданному условию.

Задача ограничения CHECK заключается в ограничении значений для столбца таблицы.

Замечания :

  • SQL CHECK CONSTRAINT нельзя использовать в VIEW.
  • SQL CHECK CONSTRAINT нельзя использовать в подзапросе.
  • SQL CHECK CONSTRAINT также можно использовать в инструкциях ALTER TABLE и DROP TABLE.

В следующем примере создается таблица. Таблица содержит CHECK CONSTRAINT для столбца комиссии. Ограничение гарантирует, что «комиссия» должна быть меньше 1. Вот имя поля и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 нет
комиссия целое число ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

Выход :

SQL CREATE TABLE с использованием ограничения по умолчанию

SQL DEFAULT CONSTRAINT предоставляет значение по умолчанию, если для столбца не задано значение none.

Пример:

1. «Working_area» должно быть «Mumbai», если для этого столбца не указано ни одного,

во время создания таблицы, имена полей и типы данных которой -

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 да ДЕФОЛТ
комиссия десятичный 8 2 да

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

Выход :

SQL CREATE TABLE с использованием значений по умолчанию и CHECK CONSTRAINT

В следующем разделе мы обсудили использование SQL DEFAULT CONSTRAINT и использование SQL CHECK CONSTRAINT при создании таблицы.

Пример:

Чтобы включить CHECK CONSTRAINT для «комиссии» и DEFAULT CONSTRAINT для «рабочей_области», это гарантирует, что -

1. «Комиссия» должна быть больше .1 и меньше .3,

2. «Working_area» должно быть «Mumbai», если для этого столбца не указано ни одного,

во время создания таблицы, которая содержит следующие имена полей и типы данных -

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 да ДЕФОЛТ
комиссия десятичный 8 2 да ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

Выход :

SQL CREATE TABLE с оператором CHECK CONSTRAINT и IN

В следующем разделе мы обсудили, как использовать оператор SQL IN вместе с SQL CHECK CONSTRAINT.

Условие CHECK CONSTRAINT может быть определено с использованием любого из базовых операторов сравнения, таких как ( >, <, =,> =, <=, <> ), а также операторов BETWEEN, IN, LIKE и NULL.

Пример:

Чтобы включить две проверки ограничения, которые -

1. Первый столбец находится в столбце «working_area», который гарантирует, что works_area должен быть либо «London», либо «Brisban», либо «Chennai», либо «Mumbai»,

2. Второй столбец - «комиссия», который гарантирует, что комиссия должна быть меньше 1,

В следующей таблице имена полей и типы данных:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 нет ПРОВЕРЯТЬ
комиссия целое число ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

SQL CREATE TABLE с оператором CHECK CONSTRAINT и LIKE

В следующем разделе мы обсудим, как можно использовать оператор SQL LIKE с CHECK CONSTRAINT.

Пример:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
ord_num десятичный 6 нет УНИКАЛЬНАЯ
ord_amount десятичный 12 2 да
ord_date голец 10 нет ПРОВЕРЯТЬ
cust_code голец 6 нет
agent_code голец 6 нет

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

Выход :

SQL CREATE TABLE с оператором CHECK CONSTRAINT и OR

В следующей теме мы обсуждаем использование оператора OR вместе с CHECK CONSTRAINT.

Пример:

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 да ПРОВЕРЯТЬ
комиссия десятичный 8 2 да ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

Выход :

SQL CREATE TABLE с использованием оператора CHECK CONSTRAINT и оператора AND, OR

В следующей теме мы обсудим использование операторов OR и AND вместе с CHECK CONSTRAINT. Условие начнет работать во время вставки записей в таблицу.

Пример:

1. «Комиссия» должна быть меньше .14, а «working_area» должно быть «Лондон»,

2. или «комиссия» должна быть меньше .15, а «working_area» должно быть «Мумбаи»,

3. или «комиссия» должна быть меньше .13, а «working_area» должно быть «Нью-Йорк»

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

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
agent_code голец 6 нет УНИКАЛЬНАЯ
имя агента голец 25 нет УНИКАЛЬНАЯ
рабочая область голец 25 да ПРОВЕРЯТЬ
комиссия десятичный 8 2 да ПРОВЕРЯТЬ

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

Выход :

SQL CREATE TABLE с использованием CASCADE

Опция CASCADE с ON DELETE позволяет удалять строки из дочерней таблицы, когда соответствующие строки удаляются из родительской таблицы.

DELETE CASCADE работает по ссылке внешнего ключа и удаляет дочерние записи, связанные с родительскими записями.

Пример:

Чтобы создать таблицу, которая содержит следующие имя поля и типы данных -

Имя поля Тип данных Размер Десятичные знаки НОЛЬ скованность
tranno десятичный нет
Идентификатор компании VARCHAR 6 да ИНОСТРАННЫЙ КЛЮЧ
код изделия VARCHAR 10 да ОСНОВНОЙ КЛЮЧ
coname VARCHAR 35 да
имя элемента VARCHAR 35 да
iqty целое число да

Таблица содержит PRIMARY KEY для «itemcode» и FOREIGN KEY для столбца «company_id», который ссылается на столбец «company_id» таблицы «company».

можно использовать следующий оператор SQL:

Код SQL:

Чтобы увидеть структуру созданной таблицы:

Код SQL:

Выводы указанного оператора SQL, показанного здесь, взяты с использованием Oracle Database 10g Express Edition.

Упражнения по SQL

  • Упражнения по SQL, практика, решение
  • SQL Получить данные из таблиц [33 Упражнения]
  • Булевы и реляционные операторы SQL [12 упражнений]
  • Подстановочные знаки SQL и специальные операторы [22 упражнения]
  • Агрегатные функции SQL [25 упражнений]
  • Вывод запроса форматирования SQL [10 упражнений]
  • SQL-запросы к нескольким таблицам [7 упражнений]
  • ФИЛЬТРАЦИЯ И СОРТИРОВКА в базе данных персонала [38 упражнений]
  • SQL СОЕДИНЯЕТ
    • SQL СОЕДИНЯЕТСЯ [29 упражнений]
    • SQL присоединяется к базе данных HR [27 упражнений]
    • ПОДПИСИ SQL [39 упражнений]
    • SQL ПОДПИСИ по базе данных HR [55 упражнений]
    • href = "/ sql-упражнения / база данных фильмов-упражнение / основные упражнения-на-фильме-базе данных.php"> ОСНОВНЫЕ запросы к базе данных фильмов [10 упражнений]
    • ПОДПИСКИ на фильм База данных [16 упражнений]
    • ПРИСОЕДИНЯЕТСЯ к базе данных фильма [24 упражнения]
    • Вступление
    • ОСНОВНЫЕ запросы по футболу базы данных [29 упражнений]
    • ПОДПИСКИ по футбольной базе данных [33 упражнения]
    • ПРИСОЕДИНЯЕТСЯ к запросам по футбольной базе данных [61 упражнений]
    • Вступление
    • ОСНОВНЫЕ, ПОДПИСИ И СОЕДИНЕНИЯ [39 упражнений]
    • ОСНОВНЫЕ запросы к базе данных сотрудников [115 упражнений]
    • БРОНИРОВАНИЕ на сотрудника База данных [77 Упражнения]

    Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.

    Предыдущая: Внешний ключ
    Далее: Изменить таблицу

    Однажды возникла необходимость организовать сложный контроль вводимой одновременно в несколько таблиц логически связанной информации в БД ORACLE. Преобразование начального логически корректного набора данных в таблицах в конечный логически корректный набор производится последовательностью DML операторов. При этом проводить модификацию может произвольный клиент поведение которого неконтролируемо а структура данных такова, что в процессе выполнения пошаговой модификации на некоторых шагах набор данных может становится логически ошибочным.

    Простейший пример это таблица истории значений из трех полей: значение, начальная дата действия значения, конечная дата действия значения. Логически корректная история не может иметь записей у которых перекрываются периоды действия значений. Для изменения границы действия двух соседних значений необходимо изменить две даты — дату конца действия предыдущего значения в предыдущей записи и дату начала действия последующего в следующей записи. Если границу смены значений двигать по времени вперед и на первом шаге переставить вперед дату окончания действия значения первой записи получим логически ошибочный набор данных. Именно поэтому решить задачу табличными триггерами невозможно — они срабатывают по каждому оператору модификации данных.

    Реальная задача слегка отличается от простейшего примера. Набор данных разложен в десятке таблиц, алгоритм бизнес правил контроля вылился в процедуру на 400 строк с обращением через линки к API на других серверах.

    Для реализации такого контроля нужен был триггер, который срабатывает только один раз в транзакции по событию COMMIT, с возможностью отката транзакции по результату отработки процедуры контроля бизнес логики. Такой триггер нашелся.


    Рассмотрим на примере подробности реализации. Набор данных.


    Данные примера является набором сущностей типа — «Сотрудник» с информацией о подразделении и месте расположения подразделения. Попробуем реализовать для этих данных бизнес правило ограничивающее количество сотрудников с должностью 'CLERK' в одном городе не более 2х.

    В общем случае правил бизнес контроля может быть несколько а в одной транзакции проходить модификация информации нескольких сотрудников. Соответственно на момент commit-а нам надо иметь два набора информации:

    — набор полей которые были модифицированы определит список бизнес правил которые должны быть проконтролированы;
    — набор идентификаторов сотрудников подлежащих контролю.

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

    Создаем таблицу которая будет содержать набор идентификаторов сотрудников модифицированных текущей транзакцией.


    На все таблицы содержащие информацию для правила контроля вешаем триггера которыми будем вставлять в emp_chk идентификаторы модифицированных сотрудников. Некоторые комментарии к триггерам. Заказчик боевого применения функционала контроля потребовал совместимость с ORACLE-9, поэтому триггера не составные (compound).

    Использование MERGE вызвано желанием проводить модификацию одним оператором. Поле emp_chk.i является платой за использование MERGE т.к. написать MERGE без фразы WHEN MATCHED не удалось.


    Очистку таблицы emp_chk в начале новой транзакции осуществляют следующие триггера. Управляет очисткой пакетная переменная var_chk.first_dml_in_commit:


    Создаем materialized view.


    Триггер инициализирующий var_chk.first_dml_in_commit обеспечивает очистку EMP_CHK в начале транзакции.


    Собственно триггер запускающий бизнес контроль.


    Некоторые комментарии к тексту CHK_EMP_MV_AS. Отладка и контроль функционирования констрэйнта можно облегчить логированием. Учтем, что в случае возникновения ошибки набор данных предъявленный для commit-а обычно откатывается и теряется. В данной реализации в лог пишется не только итоговый статус обработки но и весь набор данных сотрудника подвергшегося модификации предъявленный для commit-a независимо от результата обработки. Снимки наборов данных помещаются в поле emp_chk_log.XML. Лог пишется пакетной функцией var_chk.write_log в таблицу:


    Все бизнес правила реализованы в отдельной функции emp_logic. Функция не является членом пакета. Это позволяет разделить в разработке и сопровождении бизнес правила констрйнта и слой системных механизмов его функционирования. Ниже текст пакета var_chk.

    Функция контроля бизнес правил.


    Проверим велосипед на ходу.


    Реальная реализация этого решения работает на трех десятках серверов центрального офиса и филиалов с весны 2015 года.

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

    Примечание

    • В Oracle уникальное ограничение не может содержать более 32 столбцов.
    • Уникальное ограничение может быть определено либо в операторе CREATE TABLE, либо в операторе ALTER TABLE.

    Рассмотрим разницу между уникальным ограничением и первичным ключом.

    Первичный ключ

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

    Уникальное ограничение

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

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

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

    CREATE TABLE table_name
    (
    column1 datatype [ NULL | NOT NULL ],
    column2 datatype [ NULL | NOT NULL ],
    .

    CONSTRAINT constraint_name UNIQUE (uc_col1, uc_col2, . uc_col_n)
    );

    table_name - имя таблицы, которую вы хотите создать.
    column1 , column2 - столбцы, которые вы хотите создать в таблице.
    constraint_name - имя уникального ограничения.
    uc_col1 , uc_col2 , . uc_col_n - столбцы, которые составляют уникальное ограничение.

    Пример

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

    В этом примере мы создали уникальное ограничение supplier_unique для таблицы supplier . Оно состоит только из одного поля - поля supplier_id .

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

    CONSTRAINT supplier_unique UNIQUE (supplier_id, supplier_name)

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

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

    ALTER TABLE table_name
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2, . column_n);

    table_name - имя таблицы для изменения. Это таблица, к которой вы хотите добавить уникальное ограничение.
    constraint_name - имя уникального ограничения.
    column1 , column2 , . column_n - столбцы, которые составляют уникальное ограничение.

    Пример

    Рассмотрим пример того, как добавлять уникальное ограничение в существующую таблицу в Oracle, используя оператор ALTER TABLE.

    Команда ADD CONSTRAINT используется для создания ограничения после того, как таблица уже создана.

    Следующий SQL добавляет ограничение с именем "PK_Person", которое является ограничением первичного ключа для нескольких столбцов (ID и фамилия):

    Пример

    ALTER TABLE Persons
    ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);

    DROP CONSTRAINT

    Команда DROP CONSTRAINT используется для удаления уникального, первичного ключа, внешнего ключа или ограничения проверки.

    Отбросьте уникальное ограничение

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

    SQL Server / Oracle / MS Access:

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

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

    SQL Server / Oracle / MS Access:

    Удаления ограничения внешнего ключа

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

    SQL Server / Oracle / MS Access:

    ALTER TABLE Orders
    DROP FOREIGN KEY FK_PersonOrder;

    Отбросьте ограничение проверки

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

    SQL Server / Oracle / MS Access:

    Упражнения

    Тесты

    КАК СДЕЛАТЬ

    ПОДЕЛИТЬСЯ

    СЕРТИФИКАТЫ

    Сообщить об ошибке

    Если вы хотите сообщить об ошибке или сделать предложение, не стесняйтесь, присылайте нам электронное письмо:

    Ваше предложение:

    Спасибо, за вашу помощь!

    Топ Учебники

    Топ Справочники

    Топ Примеры

    Веб Сертификаты

    SchoolsW3 оптимизирован для обучения, тестирования и тренировки. Примеры упрощают и улучшают чтение и базовое понимание. Учебники, справочники, примеры постоянно пересматриваются, для того, чтобы избежать ошибки, невозможно гарантировать правильность всего содержимого. Используя данный сайт, вы соглашаетесь прочитать и принять условия использования, cookie и Политика конфиденциальности. Авторское право 1999 - 2021 Все права защищены.
    Работает на W3.CSS.

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