Create Foreign Keys SQL Server

В этом учебном пособии вы узнаете, как использовать (внешний ключ) в SQL Server (Transact-SQL) с синтаксисом и примерами.

Описание

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

Внешний ключ может быть создан с использованием оператора CREATE TABLE или оператора ALTER TABLE.

Создание внешнего ключа - использование оператора CREATE TABLE

Синтаксис

Синтаксис создания внешнего ключа с помощью оператора CREATE TABLE в SQL Server (Transact-SQL):

CREATE TABLE child_table
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
...

CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
);

child_table - имя дочерней таблицы, которую вы хотите создать.
column1, column2 - столбцы, которые вы хотите создать в таблице. Каждый столбец должен иметь тип данных. Столбец должен быть определен как NULL или NOT NULL, и если это значение остается пустым, база данных принимает значение NULL как значение по умолчанию.
fk_name - имя ограничения внешнего ключа, которое вы хотите создать.
child_col1, child_col2, ... child_col_n - столбцы в child_table, которые будут ссылаться на первичный ключ в parent_table (родительской таблице).
parent_table - имя родительской таблицы, первичный ключ которой будет использоваться в child_table.
parent_col1, parent_col2, ... parent_col3 - столбцы, которые составляют первичный ключ в родительской таблице. Внешний ключ будет обеспечивать связь между этими данными и столбцами child_col1, child_col2, ... child_col_n в child_table.
ON DELETE - необязательный. Он определяет, что делать с дочерними данными при удалении родительских данных. У вас есть опции NO ACTION, CASCADE, SET NULL или SET DEFAULT.
ON UPDATE - необязательный. Он указывает, что делать с дочерними данными при обновлении родительских данных. У вас есть опции NO ACTION, CASCADE, SET NULL или 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 Server (Transact-SQL) с помощью оператора CREATE TABLE. Например:

В этом примере внешнего ключа мы создали родительскую таблицу products. Таблица products имеет первичный ключ, который состоит из поля product_id.
Затем мы создали вторую таблицу под названием inventory, которая будет дочерней таблицей в этом примере внешнего ключа. Мы использовали оператор CREATE TABLE для создания внешнего ключа в таблице inventory, называемой fk_inv_product_id. Внешний ключ устанавливает связь между столбцом product_id в таблице inventory и столбцом product_id в таблице products.

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

В этом примере внешнего ключа наша родительская таблица products, имеет первичный ключ, который состоит из столбцов product_name и location. Поэтому наша дочерняя таблица и внешний ключ должны также ссылаться на эти два столбца.

Поэтому в этом примере наш внешний ключ, называемый fk_inv_product, ссылается на таблицу products на основе двух полей product_name и location.

Создание внешнего ключа - использование оператора ALTER TABLE

Синтаксис

Синтаксис создания внешнего ключа с использованием оператора ALTER TABLE в SQL Server (Transact-SQL):

ALTER TABLE child_table
ADD CONSTRAINT fk_name
FOREIGN KEY (child_col1, child_col2, ... child_col_n)
REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n);

child_table - имя дочерней таблицы, которую вы хотите изменить.
fk_name - имя ограничения внешнего ключа, которое вы хотите создать.
child_col1, child_col2, ... child_col_n - столбцы в child_table, которые будут ссылаться на первичный ключ в parent_table (родительской таблице).
parent_table - имя родительской таблицы, первичный ключ которой будет использоваться в child_table.
parent_col1, parent_col2, ... parent_col3 - столбцы, которые составляют первичный ключ в родительской таблице. Внешний ключ будет обеспечивать связь между этими данными и столбцами child_col1, child_col2, ... child_col_n в child_table.

Пример

Рассмотрим пример создания внешнего ключа в SQL Server (Transact-SQL) с помощью оператора ALTER TABLE. Например:

В этом примере внешнего ключа мы создали внешний ключ fk_inv_product_id в таблице inventory, который ссылается на таблицу products на основе поля product_id.

Мы могли бы также создать внешний ключ с несколькими полями, как показано в примере ниже:

В этом примере SQL Server мы создали внешний ключ fk_inv_product в таблице inventory, который ссылается на таблицу products на основе столбцов product_name и location.