SQL FOREIGN KEY: как создать в SQL Server с примером

Что такое ВНЕШНИЙ КЛЮЧ?

A Внешний ключ предоставляет способ обеспечения ссылочной целостности в SQL Server. Проще говоря, внешний ключ гарантирует, что значения в одной таблице должны присутствовать в другой таблице.

Правила для ВНЕШНЕГО КЛЮЧА

  • NULL допускается во внешнем ключе SQL.
  • Таблица, на которую имеется ссылка, называется родительской таблицей.
  • Таблица с внешним ключом в SQL называется дочерней таблицей.
  • Внешний ключ SQL в дочерней таблице ссылается на первичный ключ в родительской таблице.
  • Эти отношения родитель-потомок обеспечивают соблюдение правила, известного как «Ссылочная целостность».

В примере ниже внешнего ключа в SQL с диаграммой обобщаются все вышеизложенные моменты для ВНЕШНЕГО КЛЮЧА.

Правила для ВНЕШНЕГО КЛЮЧА в SQL
Как работает внешний ключ

Как создать ВНЕШНИЙ КЛЮЧ в SQL

Мы можем создать Внешний ключ на SQL-сервере в 2 способов:

  1. Студия управления SQL Server
  2. T-SQL

Студия управления SQL Server

Родительская таблица: Скажем, у нас есть родительская таблица «Курс». Course_ID и Course_name — это два столбца с Course_Id в качестве первичного ключа.

Создать ВНЕШНИЙ КЛЮЧ в SQL

Дочерний стол: Нам нужно создать вторую таблицу как дочернюю. «Course_ID» и «Course_Strength» в виде двух столбцов. Однако «Course_ID» должен быть внешним ключом.

Шаг 1) Щелкните правой кнопкой мыши «Таблицы»> «Создать»> «Таблица…».

Создать ВНЕШНИЙ КЛЮЧ в SQL

Шаг 2) Введите два названия столбца: «Course_ID» и «Course_Strength». Щелкните правой кнопкой мыши столбец Course_Id. Теперь нажмите «Отношения».

Создать ВНЕШНИЙ КЛЮЧ в SQL

Шаг 3) In 'Отношения по внешнему ключу,' Нажмите 'Добавить'

Создать ВНЕШНИЙ КЛЮЧ в SQL

Шаг 4) В разделе «Спецификация таблицы и столбца» нажмите '…' икона

Создать ВНЕШНИЙ КЛЮЧ в SQL

Шаг 5) В раскрывающемся списке выберите «Таблица первичного ключа» как «КУРС», а новая таблица теперь создается как «Таблица внешнего ключа».

Создать ВНЕШНИЙ КЛЮЧ в SQL

Шаг 6) «Таблица первичных ключей» — выберите столбец «Course_Id» в качестве столбца «Таблица первичных ключей».

«Таблица внешнего ключа». Выберите столбец «Course_Id» в качестве столбца «Таблица внешнего ключа». Нажмите ОК.

Создать ВНЕШНИЙ КЛЮЧ в SQL

Шаг 7) Нажмите на Добавить.

Создать ВНЕШНИЙ КЛЮЧ в SQL

Шаг 8) Назовите таблицу «Course_Strength» и нажмите ОК.

Создать ВНЕШНИЙ КЛЮЧ в SQL

Результат: Мы установили отношения родитель-потомок между 'Курс' и «Курс_сила».

Создать ВНЕШНИЙ КЛЮЧ в SQL

T-SQL: создание таблицы «родитель-потомок» с помощью T-SQL.

Родительская таблица: Напомним, у нас есть существующая родительская таблица с именем «Курс».

Course_ID и Course_name — это два столбца с Course_Id в качестве первичного ключа.

Создайте таблицу «родитель-потомок» с помощью T-SQL

Дочерний стол: Нам нужно создать вторую таблицу в качестве дочерней таблицы с именем «Course_Strength_TSQL».

«Course_ID» и «Course_Strength» как два столбца для дочерней таблицы Course_Strength_TSQL. Однако «Course_ID» должен быть внешним ключом.

Ниже приведен синтаксис для создания таблицы с FOREIGN KEY.

Синтаксис:

CREATE TABLE childTable
(
  column_1 datatype [ NULL |NOT NULL ],
  column_2 datatype [ NULL |NOT NULL ],
  ...

  CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (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 } ] 
);

Вот описание вышеуказанных параметров:

  • childTable — это имя таблицы, которую необходимо создать.
  • Column_1, Column_2 — столбцы, которые необходимо добавить в таблицу.
  • fkey_name — имя создаваемого ограничения внешнего ключа.
  • child_column1, child_column2…child_column_n — имя столбца chidTable для ссылки на первичный ключ в родительской таблице.
  • ParentTable — имя родительской таблицы, на ключ которой должна ссылаться дочерняя таблица.
  • родительский_столбец1, родительский_столбец2, … родительский_столбец3 — столбцы, составляющие первичный ключ родительской таблицы.
  • ПРИ УДАЛЕНИИ. Необязательный параметр. Он определяет, что происходит с дочерними данными после удаления родительских данных. Некоторые значения этого параметра включают NO ACTION, SET NULL, CASCADE или SET DEFAULT.
  • ПРИ ОБНОВЛЕНИИ — необязательный параметр. Он определяет, что происходит с дочерними данными после обновления родительских данных. Некоторые значения этого параметра включают NO ACTION, SET NULL, CASCADE или SET DEFAULT.
  • NO ACTION — используется вместе с ON DELETE и ON UPDATE. Это означает, что с дочерними данными ничего не произойдет после обновления или удаления родительских данных.
  • CASCADE- используется вместе с ON DELETE и ON UPDATE. Дочерние данные будут либо удалены, либо обновлены после удаления или обновления родительских данных.
  • SET NULL — используется вместе с ON DELETE и ON UPDATE. Дочернему элементу будет присвоено значение null после обновления или удаления родительских данных.
  • SET DEFAULT — используется вместе с ON DELETE и ON UPDATE. Дочерним данным будут присвоены значения по умолчанию после обновления или удаления родительских данных.

Давайте посмотрим на пример внешнего ключа в SQL, чтобы создать таблицу с одним столбцом в качестве ВНЕШНЕГО КЛЮЧА:

Внешний ключ в примере SQL

Запрос:

CREATE TABLE Course_Strength_TSQL
(
Course_ID Int,
Course_Strength Varchar(20) 
CONSTRAINT FK FOREIGN KEY (Course_ID)
REFERENCES COURSE (Course_ID)	
)

Шаг 1) Запустите запрос, нажав «Выполнить».

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

Результат: Мы установили отношения родитель-потомок между 'Курс' и 'Course_strength_TSQL.'

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

Использование ИЗМЕНИТЬ ТАБЛИЦУ

Теперь мы научимся использовать внешний ключ в SQL и добавлять внешний ключ на сервер SQL с помощью оператора ALTER TABLE. Мы будем использовать синтаксис, приведенный ниже:

ALTER TABLE childTable
ADD CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);

Вот описание параметров, использованных выше:

  • childTable — это имя таблицы, которую необходимо создать.
  • Column_1, Column_2 — столбцы, которые необходимо добавить в таблицу.
  • fkey_name — имя создаваемого ограничения внешнего ключа.
  • child_column1, child_column2…child_column_n — имя столбца chidTable для ссылки на первичный ключ в родительской таблице.
  • ParentTable — имя родительской таблицы, на ключ которой должна ссылаться дочерняя таблица.
  • родительский_столбец1, родительский_столбец2, … родительский_столбец3 — столбцы, составляющие первичный ключ родительской таблицы.

Изменить таблицу, добавить пример внешнего ключа:

ALTER TABLE department
ADD CONSTRAINT fkey_student_admission
    FOREIGN KEY (admission)
    REFERENCES students (admission);

Мы создали внешний ключ с именем fkey_student_admission в таблице отдела. Этот внешний ключ ссылается на столбец приема в таблице студентов.

Пример запроса FOREIGN KEY

Во-первых, давайте посмотрим данные нашей родительской таблицы, COURSE.

Запрос:

SELECT * from COURSE;

Пример запроса FOREIGN KEY

Теперь добавим строку в дочернюю таблицу: 'Course_strength_TSQL.'

Мы попробуем вставить два типа строк

  1. Первый тип, для которого Course_Id в дочерней таблице будет существовать в Course_Id родительской таблицы. т.е. Course_Id = 1 и 2
  2. Второй тип, для которого Course_Id в дочерней таблице не существует в Course_Id родительской таблицы. т.е. Course_Id = 5

Запрос:

Insert into COURSE_STRENGTH values (1,'SQL');
Insert into COURSE_STRENGTH values (2,'Python');
Insert into COURSE_STRENGTH values (5,'PERL');

Пример запроса FOREIGN KEY

Результат: Давайте вместе запустим запрос, чтобы увидеть нашу родительскую и дочернюю таблицу.

Строки с Course_ID 1 и 2 существуют в таблице Course_strength. Принимая во внимание, что Course_ID 5 является исключением.

Пример запроса FOREIGN KEY

Итоги

  • Каждое значение внешнего ключа должно быть частью Основной ключ других таблиц.
  • Внешний ключ MySQL может ссылаться на другой столбец в той же таблице. Эта ссылка называется самоссылкой.
  • Ограничение внешнего ключа SQL: используется для защиты связей между таблицами и недопустимыми данными, которые необходимо вставить в столбец внешнего ключа.
  • Вы можете создать внешний ключ, используя Create Table, Alter Table или Студия управления SQL Server.
  • Вот разница между первичным ключом и внешним ключом: Кликните сюда