Обмеження типу FOREIGN KEY (зовнішній ключ) оголошуються для одного або декількох стовпців таблиці, що посилаються на стовпець з обмеженням UNIQUE або PRIMARY KEY іншої таблиці. (Зовнішній ключ може посилатися на значення з ознакою унікальності або на первинний ключ в тій же таблиці, де він знаходиться сам, але такі ключі зустрічаються рідко.) Після цього зовнішні ключі можуть запобігти введення в таблицю даних, для яких немає відповідних значень в пов'язаної таблиці . Зовнішні ключі є головними способами визначення взаємозв'язку таблиць в реляційної базі даних. Ось деякі правила, що стосуються зовнішніх ключів.
- В одній таблиці можуть одночасно існувати кілька зовнішніх ключів.
- Зовнішній ключ можна оголосити для визначення посилання на первинний ключ або на значення з ознакою унікальності для встановлення прямого зв'язку між двома таблицями.
FOREIGN KEY (локальний стовпець [...])
REFERENCES пов'язана таблиця [(пов'язаний стовпець [...])].
Називається таблиця і, де потрібно, стовпець (стовпці), який зберігає допустимий для зовнішнього ключа список значень. Пов'язаний стовпець повинен вже бути визначений в пропозиціях NOT DEFERRABLE PRIMARY KEY або NOT DEFERRABLE UNIQUE KEY. Типи таблиць повинні збігатися. Наприклад, якщо одна таблиця є тимчасовою локальної таблицею, то вони обидві повинні бути тимчасовими і локальними.
MATCH (FULL | PARTIAL | SIMPLE).
Визначає необхідний ступінь збігу зв'язує (локального) стовпця і пов'язаного (зовнішнього) стовпчика при наявності в шпальтах значень NULL.
Збіг є прийнятним, якщо: 1) жоден з зв'язують стовпців дорівнює NULL і все значення збігаються з усіма значеннями пов'язаного
- Зовнішній ключ рівня таблиці [CONSTRAINT [імя_ограніченія]] FOREIGN KEY
(Локальний_столбец [...]) REFERENCES связанная_табліца [(связанний_столбец [...])] [MATCH]
- Зовнішній ключ рівня стовпчика [CONSTRAINT [імя_ограніченія]]
REFERENCES пов'язана таблиця [(связанний_столбец [...])] [MATCH]
CASCADE | RESTRICT | SET NULL | SET DEFAULT>] [отклажіваніе_ограніченія] [время_откладиванія]
Збіг є прийнятним, якщо щонайменше один з зв'язують стовпців дорівнює NULL, а решта збігаються з відповідними значеннями пов'язаного стовпця.
Збіг є прийнятним, коли будь-яке значення в сполучному стовпці одно NULL або збігається з відповідним значенням пов'язаного стовпця. Цей вид збіги приймається за замовчуванням.
Вказує, що в тому випадку, якщо операція поновлення UPDATE захоплює один або кілька связанних_столбцов первинного або унікального ключа в пов'язаної таблиці, слід виконати відповідну дію, щоб посилальна цілісність даних зовнішніх ключів не була порушена. Пропозиція ON UPDATE можна оголосити окремо або ж разом з пропозицією ON DELETE. Якщо пропозиція опущено, за замовчуванням приймається ON UPDATE NO ACTION.
Вказує, що в тому випадку, якщо операція видалення DELETE захоплює один або кілька связанних_столбцов первинного або унікального ключа в пов'язаної таблиці, слід виконати відповідну дію, щоб посилальна цілісність даних зовнішніх ключів не була порушена. Пропозиція ON DELETE можна оголосити окремо або ж разом з пропозицією ON UPDATE. Якщо пропозиція опущено, за замовчуванням приймається ON DELETE NO ACTION.
NO ACTION | CASCADE | RESTRICT | SET NULL | SET DEFAULT
Визначає дії, які виконує база даних для забезпечення посилальної цілісності зовнішнього ключа, коли змінюється або видаляється значення пов'язаного первинного або унікального ключа.
Вказує, що в тому випадку, якщо змінюється або видаляється значення первинного або унікального ключа, пов'язаного з зовнішнім ключем, база даних не виконує ніяких дій.
Вказує, що в тому випадку, якщо змінюється або видаляється значення первинного або унікального ключа, база даних виконує те ж саме діяння (тобто видалення або оновлення) над зовнішнім ключем.
Вказує, що база даних не дозволить змінити значення первинного або унікального ключа, пов'язаного з зовнішнім ключем.
Вказує, що в разі зміни або видалення первинного або унікального ключа база даних встановить значення зовнішнього ключа в NULL.
Вказує, що в разі зміни або видалення первинного або унікального ключа база даних встановлює для зовнішнього ключа значення за замовчуванням (використовуючи задані вами для стовпців значення за замовчуванням).
Як і в прикладі коду з первинними ключами, цей загальний синтаксис можна використовувати і для зовнішніх ключів рівня стовпців, і для зовнішніх ключів рівня таблиці. Зауважте, що обмеження рівня стовпців і рівня таблиці працюють абсолютно однаково. Вони просто визначаються на різних рівнях команди CREATE TABLE. У наступному прикладі ми створимо одностолбцовий зовнішній ключ в стовпці salesrep, який буде посилатися на стовпець empid таблиці employee. Ми створимо цей зовнішній ключ двома способами, спочатку на рівні стовпця, а потім на рівні таблиці.
Додаткова інформація по темі
Опис обмеження PRIMARY KEY, як використовувати, які особливості для різних платформ
Основне призначення і спосіб використання обмеження CHECK, загальний синтаксис при використанні
Опис обмеження UNIQUE, основні правила використання в різних платформах баз даних
Обмеження в базах даних, які буваю, для чого існують і використовуються, синтаксис