Речення CONSTRAINT

Обмеження та індекс мають схожі функції. Проте перший елемент дає змогу встановити зв’язок з іншою таблицею.

За допомогою речення CONSTRAINT в інструкціях ALTER TABLE і CREATE TABLE можна створювати й вилучати обмеження. Речення CONSTRAINT бувають двох типів: одні дають змогу створювати обмеження в одному полі, а інші – у кількох полях.

Примітка.: Обробник баз даних Microsoft Access не підтримує використання CONSTRAINT або будь-яких інших інструкцій DDL з іншими базами даних. У такому разі слід використовувати методи DAO Create.

Синтаксис

Обмеження в одному полі:

CONSTRAINT ім’я {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES підлегла_таблиця [(підлегле_поле1; підлегле_поле2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Обмеження в кількох полях:

CONSTRAINT ім’я
{PRIMARY KEY (головний_елемент1[; головний_елемент2 [; ...]]) |
UNIQUE (унікальне_значення1[; унікальне_значення2 [; ...]]) |
NOT NULL (не_Null-значення1[; не_Null-значення2 [; ...]]) |
FOREIGN KEY [NO INDEX] (посилання1[; посилання2 [; ...]]) REFERENCES підлегла_таблиця [(підлегле_поле1 [; підлегле_поле2 [; ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

У таблиці нижче наведено частини речення CONSTRAINT.

Частина

Опис

ім’я

Ім’я обмеження, яке потрібно створити.

головний_елемент1, головний_елемент2

Імена полів, яким потрібно призначити первинний ключ.

унікальне_значення1, унікальне_значення2

Імена полів, які потрібно призначити як унікальний ключ.

не_Null-значення1, не_Null-значення2

Імена полів, у яких заборонено використовувати Null-значення.

посилання1, посилання2

Імена полів зовнішнього ключа, які посилаються на поля в іншій таблиці.

підлегла_таблиця

Ім’я підлеглої таблиці з полями, указаними в аргументі підлегле_поле.

підлегле_поле1, підлегле_поле2

Імена полів у підлеглій таблиці, визначеній в аргументі посилання1, посилання2. Це речення можна не використовувати, якщо поле, на яке посилаються, – це первинний ключ підлеглої таблиці.


Примітки

У реченні визначення поля інструкції ALTER TABLE або CREATE TABLE можна застосувати синтаксис обмеження в одному полі, за яким слід указати специфікацію типу даних поля.

Якщо ви використовуєте зарезервоване слово CONSTRAINT за межами речення визначення поля інструкції ALTER TABLE або CREATE TABLE, слід застосувати синтаксис обмеження в кількох полях.

Речення CONSTRAINT дає змогу призначити поле як обмеження одного з таких типів:

  • За допомогою зарезервованого слова UNIQUE поле можна призначити як унікальний ключ. Це означає, що значення в полях таблиці не повторюватимуться. Кожне поле або список полів можна зробити унікальними. Якщо обмеження в кількох полях призначено як унікальний ключ, усі поля в індексі мусять мати унікальні значення, навіть якщо кілька записів мають однакове значення в одному з полів.

  • За допомогою зарезервованих слів PRIMARY KEY одне поле або їх набір у таблиці можна призначити як унікальний ключ. Первинний ключ мусить мати унікальні значення (не Null). Таблиця може мати лише один первинний ключ.

    Примітка.: Не встановлюйте обмеження PRIMARY KEY у таблиці, яка вже містить первинний ключ. У такому разі з’явиться повідомлення про помилку.

  • За допомогою зарезервованих слів UNIQUE поле можна призначити як зовнішній ключ. Якщо первинний ключ підлеглої таблиці складається з кількох полів, слід використовувати визначення обмеження в кількох полях, у якому вказано всі поля з посиланням, ім’я підлеглої таблиці та імена полів, на які є посилання в цій таблиці (у тому ж порядку, у якому вказано поля з посиланням). Якщо поля, на які є посилання, збігаються з первинним ключем підлеглої таблиці, їх указувати не потрібно. За замовчуванням обробник баз даних діє так, якщо первинний ключ підлеглої таблиці – це поля, на які є посилання.

    Зовнішній ключ блокує виконання завдань визначення, коли змінюється значення відповідного первинного ключа.

  • Дії, які потрібно виконувати в підлеглій таблиці, можна визначити на основі відповідної дії з первинним ключем таблиці, у якій визначено речення CONSTRAINT. Наприклад, розгляньте таке визначення таблиці "Клієнти":

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Розгляньте визначення таблиці "Замовлення" нижче, яке визначає зв’язок зовнішнього ключа, посилаючись на первинний ключ таблиці "Клієнти".

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Речення ON UPDATE CASCADE і ON DELETE CASCADE визначаються в зовнішньому ключі. Речення ON UPDATE CASCADE означає, що якщо ідентифікатор клієнта (CustId) оновлюється в таблиці "Клієнти", ця зміна застосовується також у таблиці "Замовлення". У кожному замовленні з відповідним ідентифікатором клієнта автоматично оновлюватиметься його значення. Речення ON DELETE CASCAD означає, що якщо клієнта видаляють із таблиці "Клієнти", усі рядки в таблиці замовлення, які містять його ідентифікатор, також видаляються.

Розгляньте визначення таблиці "Замовлення" нижче, у якому замість дії CASCADE використовується дія SET NULL.

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

Речення ON UPDATE SET NULL означає, що якщо ідентифікатор користувача (CustId) оновлюється в таблиці "Клієнти", відповідному значенню зовнішнього ключа в таблиці "Замовлення" автоматично встановлюється NULL-значення. Аналогічно, речення ON DELETE SET NULL означає, що якщо користувача видалено з таблиці "Клієнти", усім відповідним зовнішнім ключам у таблиці "Замовлення" автоматично встановлюється NULL-значення.

Щоб уникнути автоматичного створення індексів зовнішніх ключів, можна використовувати модифікатор NO INDEX. Цю форму визначення зовнішнього ключа слід застосовувати, лише якщо кінцеві значення індексу часто повторюватимуться. У такому разі легше виконати сканування таблиці, ніж використовувати індекс. Цей тип індексу зі вставленими в таблицю або видаленими з неї рядками знижує продуктивність і не надає жодних переваг.



Удосконалення навичок роботи з Office
Ознайомтеся з навчальними матеріалами
Отримуйте нові функції раніше за інших
Приєднайтеся до оцінювачів Office

Ця інформація корисна?

Дякуємо за ваш відгук!

Дякуємо за відгук! Схоже, вам може стати в нагоді допомога одного з наших спеціалістів служби підтримки Office, з яким ми вас можемо з’єднати.

×