SQL FOREIGN KEY: как создать в SQL Server с примером
Что такое ВНЕШНИЙ КЛЮЧ?
A Внешний ключ предоставляет способ обеспечения ссылочной целостности в SQL Server. Проще говоря, внешний ключ гарантирует, что значения в одной таблице должны присутствовать в другой таблице.
Правила для ВНЕШНЕГО КЛЮЧА
- NULL допускается во внешнем ключе SQL.
- Таблица, на которую имеется ссылка, называется родительской таблицей.
- Таблица с внешним ключом в SQL называется дочерней таблицей.
- Внешний ключ SQL в дочерней таблице ссылается на первичный ключ в родительской таблице.
- Эти отношения «родитель-потомок» реализуют правило, известное как «Ссылочный». Integrity".
В примере ниже внешнего ключа в SQL с диаграммой обобщаются все вышеизложенные моменты для ВНЕШНЕГО КЛЮЧА.

Как создать ВНЕШНИЙ КЛЮЧ в SQL
Мы можем создать Внешний ключ на SQL-сервере в 2 способов:
- Студия управления SQL Server
- T-SQL
Студия управления SQL Server
Родительская таблица: Скажем, у нас есть родительская таблица «Курс». Course_ID и Course_name — это два столбца с Course_Id в качестве первичного ключа.
Дочерний стол: Нам нужно создать вторую таблицу как дочернюю. «Course_ID» и «Course_Strength» в виде двух столбцов. Однако «Course_ID» должен быть внешним ключом.
Шаг 1) Щелкните правой кнопкой мыши «Таблицы»> «Создать»> «Таблица…».
Шаг 2) Введите два названия столбца: «Course_ID» и «Course_Strength». Щелкните правой кнопкой мыши столбец Course_Id. Теперь нажмите «Отношения».
Шаг 3) In 'Отношения по внешнему ключу,' Нажмите 'Добавить'
Шаг 4) В разделе «Спецификация таблицы и столбца» нажмите '…' икона
Шаг 5) В раскрывающемся списке выберите «Таблица первичного ключа» как «КУРС», а новая таблица теперь создается как «Таблица внешнего ключа».
Шаг 6) «Таблица первичных ключей» — выберите столбец «Course_Id» в качестве столбца «Таблица первичных ключей».
«Таблица внешнего ключа». Выберите столбец «Course_Id» в качестве столбца «Таблица внешнего ключа». Нажмите ОК.
Шаг 7) Нажмите на Добавить.
Шаг 8) Назовите таблицу «Course_Strength» и нажмите ОК.
Результат: Мы установили отношения родитель-потомок между 'Курс' и «Курс_сила».
T-SQL: создание таблицы «родитель-потомок» с помощью T-SQL.
Родительская таблица: Напомним, у нас есть существующая родительская таблица с именем «Курс».
Course_ID и Course_name — это два столбца с Course_Id в качестве первичного ключа.
Дочерний стол: Нам нужно создать вторую таблицу в качестве дочерней таблицы с именем «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) Запустите запрос, нажав «Выполнить».
Результат: Мы установили отношения родитель-потомок между 'Курс' и 'Course_strength_TSQL.'
Использование ИЗМЕНИТЬ ТАБЛИЦУ
Теперь мы научимся использовать внешний ключ в 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;
Теперь добавим строку в дочернюю таблицу: 'Course_strength_TSQL.'
Мы попробуем вставить два типа строк
- Первый тип, для которого Course_Id в дочерней таблице будет существовать в Course_Id родительской таблицы. т.е. Course_Id = 1 и 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');
Результат: Давайте вместе запустим запрос, чтобы увидеть нашу родительскую и дочернюю таблицу.
Строки с Course_ID 1 и 2 существуют в таблице Course_strength. Принимая во внимание, что Course_ID 5 является исключением.
Резюме
- Каждое значение внешнего ключа должно быть частью Основной ключ других таблиц.
- Команда MySQL Внешний ключ может ссылаться на другой столбец в той же таблице. Эта ссылка называется самоссылкой.
- Ограничение внешнего ключа SQL: используется для защиты связей между таблицами и недопустимыми данными, которые необходимо вставить в столбец внешнего ключа.
- Вы можете создать внешний ключ, используя Create Table, Alter Table или Студия управления SQL Server.
- Вот разница между первичным ключом и внешним ключом: Кликните сюда