Введение в внешний ключ в SQL

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

Таким образом, если в базе данных есть отношения «один ко многим» или «многие ко многим», внешние ключи будут очень полезны. Он действует как перекрестная ссылка между двумя таблицами (parent_table и child_table), поскольку он ссылается на первичный ключ другой таблицы. Таким образом, он устанавливает связь между parent_table и child_table.

Синтаксис

Создание новой таблицы с внешним ключом требует разрешения CREATE TABLE в базе данных.

CREATE TABLE child_Table
(
column_1 datatype ( NULL |NOT NULL ),
column_2 datatype ( NULL |NOT NULL ),

CONSTRAINT F_key
FOREIGN KEY (child_column1, child_column2, … child_column_n)
REFERENCES parent_Table (parent_column1, parent_column2, … parent_column_n)
( ON DELETE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) ( ON UPDATE ( NO ACTION |CASCADE |SET NULL |SET DEFAULT ) ) );

  • Child_Table - это имя таблицы, которую мы создадим
  • column_1, column_2 - столбцы, которые будут добавлены в таблицу.
  • F_key - это ограничение внешнего ключа.
  • child_column1, child_column2… child_column_n - это имя столбцов child_Table для ссылки на первичный ключ в родительской таблице.
  • Parent_Table - это имя parent_table. На первичный ключ parent_table есть ссылка в child_table
  • ON DELETE - этот параметр выполняет действие с дочерними данными после удаления родительских данных. SET NULL, NO ACTION, CASCADE, SET DEFAULT - некоторые из значений этого параметра.
  • ON UPDATE - это необязательный параметр, который выполняет действия с дочерними данными после обновления родительских данных. SET NULL, NO ACTION, CASCADE, SET DEFAULT - некоторые из значений этого параметра.
  • CASCADE - мы можем использовать это вместе с ON DELETE и ON UPDATE. После удаления или обновления родительских данных Дочерние данные будут либо удалены, либо обновлены.

Создание внешнего ключа в существующей таблице требует разрешения ALTER для таблицы.

ALTER table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY foreign_key_name(columns)
REFERENCES parent_table(columns)

правила

  1. Внешние ключи не применимы к временным таблицам.
  2. Ограничение внешнего ключа не обязательно должно быть связано только с первичным ключом другой таблицы, оно также может быть связано с ограничением UNIQUE другой таблицы.
  3. Ограничения FOREIGN KEY могут ссылаться на другой столбец в той же таблице. Это называется самостоятельной ссылкой.
  4. Ограничения внешнего ключа могут ссылаться на таблицы в одной и той же базе данных.
  5. Мы также можем вставить значения NULL в дочернюю таблицу.
  6. Когда мы вставляем значение, отличное от NULL, в ограничение внешнего ключа, это значение должно существовать в указанном столбце, иначе возникло сообщение о нарушении.
  7. Значение уникальных ключей родительского элемента нельзя изменить, если в качестве правила обновления выбрано RESTRICT и имеется одна или несколько зависимых строк. Однако, если в качестве правила обновления указано NO ACTION, родительские уникальные ключи могут быть обновлены, если у каждого дочернего элемента есть родительский ключ к моменту завершения оператора update.

Примеры

Скажем, у нас есть две таблицы клиентов и заказов. Таблица клиентов содержит все данные о клиентах, а таблица заказов содержит данные о заказах клиентов.

Клиенты

CUST_IDПервичный ключ
CUST_NAME
Место расположения

заказы

Номер заказаПервичный ключ
Дата заказа
Кол-во
CUST_IDИностранный ключ
Общее количество

В приведенном выше примере столбец Cust_id в таблице ORDERS является внешним ключом, указывающим на столбец Cust_id в таблице CUSTOMERS.

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

Клиенты

1001AlexНАС
1002КэриНАС
1003SidВеликобритания
1004ТомAUS
1005КапилIND

заказы

7820-10-2018510021200
7912-10-201741001800
8020-11-201621005369
8109-10-201651002258
8219-08-20161110041900
8330-06-20164510012300
8416-02-201671001890
8502-01-201621002260

Для cust_id 1001 в таблице заказов есть три заказа.

Для cust_id 1003 нет порядка.

Таким образом, если у нас есть определенные данные (например, идентификатор 1003) в родительской таблице, то нет необходимости иметь эти данные в дочерней таблице, но наоборот это не так.

У нас не может быть данных в дочерней таблице (Таблица заказов), которых нет в родительской таблице (Клиенты.)

Например, мы не можем вставить новую запись, скажем, для cust_id 1006 в таблице «Заказы», ​​поскольку cust_id 1006 не существует в таблице «Клиенты».

Ниже приведены примеры, которые нарушают ссылочную целостность этих отношений:

  1. Вставка строки в таблицу ORDERS, где Cust_ID не отображается в столбце Cust_ID в таблице CUSTOMERS.
  2. Удаление строки из таблицы CUSTOMERS, в которой Cust_ID удаляемой строки все еще присутствует в столбце Cust_ID в таблице ORDERS.

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

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

Вывод - внешний ключ в SQL

Поэтому желательно использовать внешний ключ в базе данных, которая имеет отношения один к одному или один ко многим. Основным преимуществом использования ограничений внешнего ключа является то, что это повышает производительность. Разработчики могут легко определить структуру базы данных. Мы также можем проверить, как запрос будет получать данные.

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

Это руководство по внешнему ключу в SQL. Здесь мы обсуждаем правила и примеры внешнего ключа в SQL с синтаксисом. Вы также можете взглянуть на следующие статьи, чтобы узнать больше -

  1. Представления SQL
  2. Типы объединений в SQL Server
  3. Что такое PL / SQL?
  4. Ограничения SQL Server
  5. 6 лучших типов соединений в MySQL с примерами