Как задать foreign key в sql
Перейти к содержимому

Как задать foreign key в sql

  • автор:

sp_fkeys (Transact-SQL)

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

Синтаксис

sp_fkeys [ @pktable_name = ] 'pktable_name' [ , [ @pktable_owner = ] 'pktable_owner' ] [ , [ @pktable_qualifier = ] 'pktable_qualifier' ] < , [ @fktable_name = ] 'fktable_name' >[ , [ @fktable_owner = ] 'fktable_owner' ] [ , [ @fktable_qualifier = ] 'fktable_qualifier' ] 

Аргументы

[ ] @pktable_name=’pktable_name
Имя таблицы с первичным ключом, применяемое для возврата сведений о каталоге. pktable_name — sysname с значением NULL по умолчанию. Сопоставление по шаблону не поддерживается. Этот параметр или параметр fktable_name или оба параметра должны быть предоставлены.

[ ] @pktable_owner=’pktable_owner
Имя владельца таблицы (с первичным ключом), используемого для возврата сведений каталога. pktable_owner имеет имя sysname с значением NULL по умолчанию. Сопоставление по шаблону не поддерживается. Если pktable_owner не задано, применяются правила видимости таблиц по умолчанию для базовых СУБД.

В SQL Server, если текущий пользователь владеет таблицей с указанным именем, возвращаются столбцы этой таблицы. Если pktable_owner не указан, а текущий пользователь не владеет таблицей с указанным pktable_name, процедура ищет таблицу с указанным pktable_name владельцем базы данных. Если такая таблица существует, возвращаются ее столбцы.

[ @pktable_qualifier =] «pktable_qualifier»
Имя квалификатора таблицы (с первичным ключом). pktable_qualifier имеет имя sysname с значением NULL по умолчанию. Различные продукты СУБД поддерживают трехкомпонентное именование таблиц (qualifier.owner.name). В SQL Server квалификатор представляет имя базы данных. В некоторых СУБД он представляет имя сервера в среде базы данных, где находится таблица.

[ ] @fktable_name=’fktable_name
Имя таблицы (с внешним ключом), применяемое для возврата сведений о каталоге. fktable_name имеет имя sysname с значением NULL по умолчанию. Сопоставление по шаблону не поддерживается. Этот параметр или параметр pktable_name или оба параметра должны быть предоставлены.

[ @fktable_owner =] ‘fktable_owner
Имя владельца таблицы (с внешним ключом), применяемое для возврата сведений о каталоге. fktable_owner — sysname с значением NULL по умолчанию. Сопоставление по шаблону не поддерживается. Если fktable_owner не указано, применяются правила видимости таблиц по умолчанию для базовых СУБД.

В SQL Server, если текущий пользователь владеет таблицей с указанным именем, возвращаются столбцы этой таблицы. Если fktable_owner не указан, а текущий пользователь не владеет таблицей с указанным fktable_name, процедура ищет таблицу с указанным fktable_name владельцем базы данных. Если такая таблица существует, возвращаются ее столбцы.

[ ] @fktable_qualifier= ‘fktable_qualifier
Имя квалификатора таблицы (с внешним ключом). fktable_qualifier имеет имя sysname с значением NULL по умолчанию. В SQL Server квалификатор представляет имя базы данных. В некоторых СУБД он представляет имя сервера в среде базы данных, где находится таблица.

Значения кода возврата

Результирующие наборы

Имя столбца Тип данных Описание:
PKTABLE_QUALIFIER sysname Имя квалификатора таблицы (с первичным ключом). Это поле может иметь значение NULL.
PKTABLE_OWNER sysname Имя владельца таблицы (с первичным ключом). Это поле всегда возвращает значение.
PKTABLE_NAME sysname Имя таблицы (с первичным ключом). Это поле всегда возвращает значение.
PKCOLUMN_NAME sysname Имя первичных ключевых столбцов для каждого столбца таблицы TABLE_NAME. Это поле всегда возвращает значение.
FKTABLE_QUALIFIER sysname Имя квалификатора таблицы (с внешним ключом). Это поле может иметь значение NULL.
FKTABLE_OWNER sysname Имя владельца таблицы (с внешним ключом). Это поле всегда возвращает значение.
FKTABLE_NAME sysname Имя таблицы (с внешним ключом). Это поле всегда возвращает значение.
FKCOLUMN_NAME sysname Имя внешнего ключевого столбца для каждого столбца таблицы TABLE_NAME. Это поле всегда возвращает значение.
KEY_SEQ smallint Порядковый номер столбца в первичном ключе, состоящем из нескольких столбцов. Это поле всегда возвращает значение.
UPDATE_RULE smallint Действие, совершаемое над внешним ключом, когда операция SQL является операцией обновления. Возможные значения:
0=CASCADE; каскадное изменение в соответствии с внешним ключом.
1=NO ACTION; отсутствие изменений при наличии внешнего ключа.
2 = задать значение NULL
3 = задать значение по умолчанию
DELETE_RULE smallint Действие, совершаемое над внешним ключом, когда операция SQL является операцией удаления. Возможные значения:
0=CASCADE; каскадное изменение в соответствии с внешним ключом.
1=NO ACTION; отсутствие изменений при наличии внешнего ключа.
2 = задать значение NULL
3 = задать значение по умолчанию
FK_NAME sysname Идентификатор внешнего ключа. Возвращает NULL, если не применим к источнику данных. SQL Server возвращает имя ограничения FOREIGN KEY.
PK_NAME sysname Идентификатор первичного ключа. Возвращает NULL, если не применим к источнику данных. SQL Server возвращает имя ограничения PRIMARY KEY.

Возвращаемые результаты упорядочены по FKTABLE_QUALIFIER, FKTABLE_OWNER, FKTABLE_NAME и KEY_SEQ.

Замечания

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

  • Временно отключить проверку ограничений (ALTER TABLE NOCHECK или CREATE TABLE NOT FOR REPLICATION) при работе с таблицами, потом включить ее снова.
  • Использовать триггеры кода приложения для принудительного выполнения связей.

Если введено имя таблицы первичных ключей, а имя таблицы внешних ключей — NULL, то процедура sp_fkeys возвращает все таблицы, в которых есть внешний ключ к данной таблице. Если введено имя таблицы внешних ключей, а имя таблицы первичных ключей — NULL, то процедура sp_fkeys возвращает все таблицы, имеющие связь «первичный-внешний ключ» с внешними ключами в таблице внешних ключей.

Хранимая процедура sp_fkeys эквивалентна SQLForeignKeys в ODBC.

Разрешения

Требуется SELECT разрешение на схему.

Примеры

В приведенном ниже примере выводится список внешних ключей для таблицы HumanResources.Department базы данных AdventureWorks2022 .

USE AdventureWorks2022; GO EXEC sp_fkeys @pktable_name = N'Department' ,@pktable_owner = N'HumanResources'; 

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

В приведенном ниже примере выводится список внешних ключей для таблицы DimDate базы данных AdventureWorksPDW2012 . Строки не возвращаются, так как Azure Synapse Analytics не поддерживает внешние ключи.

EXEC sp_fkeys @pktable_name = N'DimDate'; 

Изменение связей по внешнему ключу

Вы можете изменить сторону внешнего ключа связи в SQL Server с помощью SQL Server Management Studio или Transact-SQL. При изменении внешнего ключа таблицы изменяются столбцы, связанные со столбцами таблицы первичного ключа.

В этом разделе

  • Перед началом работыОграниченияБезопасность
  • Изменение внешнего ключа с использованием следующих средств:Среда SQL Server Management StudioTransact-SQL

Перед началом

Ограничения

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

  • Столбец типа char или sysname можно связать со столбцом типа varchar .
  • Столбец типа binary можно связать со столбцом типа varbinary .
  • Псевдоним типа данных можно связать со своим базовым типом.

Безопасность

Разрешения

Требуется разрешение ALTER на таблицу.

Использование среды SQL Server Management Studio

Изменение внешнего ключа
  1. Разверните в обозревателе объектовтаблицу с внешним ключом, а затем разверните Ключи.
  2. Щелкните правой кнопкой мыши внешний ключ, который нужно изменить, и выберите пункт Изменить.
  3. В диалоговом окне Связи внешних ключей можно внести следующие изменения. Выбранные связи
    Выводит список существующих связей. Выберите связь, чтобы ее свойства отобразились в сетке справа. Если этот список пуст, то для этой таблицы не было определено ни одной связи. Добавление
    Создает новую связь. Спецификации таблиц и столбцов должны быть заданы, иначе связь будет недопустима. Удаление
    Удаляет связь, выбранную в списке Выбранные связи . Чтобы отменить добавление связи, удалите эту связь, нажав данную кнопку. Общая категория
    Разверните, чтобы увидеть категории Проверить существующие данные при создании или повторном включении и Спецификации таблиц и столбцов. Проверить существующие данные при создании или повторном включении
    Проверяет все существующие данные в таблице перед созданием или возобновлением ограничения относительно этого ограничения. Категория спецификации таблиц и столбцов
    Разверните, чтобы увидеть, какие столбцы, из каких таблиц действуют как внешний и первичный (или уникальный) ключ в данной связи. Для изменения или задания этих значений нажмите кнопку с многоточием ( . ) справа от поля свойства. Базовая таблица внешнего ключа
    Показывает, какая таблица содержит столбец, действующий как внешний ключ в выбранной связи. Внешние ключевые столбцы
    Показывает, какой столбец действует как внешний ключ в выбранной связи. Базовая таблица первичного или уникального ключа
    Показывает, какая таблица содержит столбец, действующий как первичный (или уникальный) ключ в выбранной связи. Первичные или уникальные ключевые столбцы
    Показывает, какой столбец действует как первичный (или уникальный) ключ в выбранной связи. Категория «Идентификатор»
    Разверните, чтобы увидеть поля свойств Имя и Описание. Название
    Показывает имя связи. Если создается новая связь, ей присваивается имя по умолчанию в зависимости от таблицы, отображаемой в активном окне в Конструкторе таблиц. Имя можно изменить в любой момент. Описание
    Описывает связь. Чтобы ввести более подробное описание, щелкните Описание и нажмите кнопку с многоточием (. ) справа от поля свойства. При этом появится большее поле для записи текста. Категория конструктора таблиц
    Разверните, чтобы увидеть данные для категорий Проверка существующих данных при создании и возобновлении и Включить использование для репликации. Принудительное применение для репликации
    Показывает, использовать ли данное ограничение, когда агент репликации выполняет в таблице вставку, изменение или удаление. Принудительное использование ограничения внешнего ключа
    Укажите, допустимы ли изменения данных столбцов связи, если при этом нарушится целостность связи внешнего ключа. Выберите Да , если нужно запретить такие изменения, и Нет , если нужно разрешить их. Категория спецификаций INSERT и UPDATE
    Разверните, чтобы увидеть сведения о Правиле удаления и Правиле обновления связи. Удаление правила
    Укажите, что произойдет при попытке пользователя удалить строку с данными, участвующую в связи внешнего ключа:
    • Нет действий. Сообщение об ошибке информирует пользователя, что удаление недопустимо, и инструкция DELETE откатывается.
    • Каскад. Удаляет все строки, содержащие данные, участвующие в связи внешнего ключа. Не следует использовать параметр CASCADE, если таблица будет включена в публикацию слиянием, в которой используются логические записи.
    • Присвоить NULL . Задает значение, равное NULL, если все внешние ключевые столбцы в таблице могут содержать значения NULL.
    • Присвоить значение по умолчанию . Задает значение по умолчанию, определенное для данного столбца, если все внешние ключевые столбцы в таблице имеют значения по умолчанию.

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

  • Нет действий. Сообщение об ошибке информирует пользователя, что обновление недопустимо, и инструкция UPDATE откатывается.
  • Каскад. Обновляет все строки, содержащие данные, участвующие в связи внешнего ключа. Не следует использовать параметр CASCADE, если таблица будет включена в публикацию слиянием, в которой используются логические записи.
  • Присвоить NULL . Задает значение, равное NULL, если все внешние ключевые столбцы в таблице могут содержать значения NULL.
  • Присвоить значение по умолчанию. Задает значение по умолчанию, определенное для данного столбца, если все внешние ключевые столбцы в таблице имеют значения по умолчанию.

Использование Transact-SQL

Изменение внешнего ключа

Чтобы изменить ограничение FOREIGN KEY с помощью Transact-SQL, сначала необходимо удалить существующее ограничение FOREIGN KEY, а затем повторно создать его с новым определением. Дополнительные сведения см. в разделах Delete Foreign Key Relationships и Create Foreign Key Relationships.

Как задать foreign key в sql

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

Эта инструкция — часть курса «MySQL для новичков».

Смотреть весь курс

Введение

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

Облачные базы данных

Что такое первичный и внешний ключи и зачем они нужны

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

Первичный ключ или primary key

Первичный ключ — особенное поле в SQL-таблице, которое позволяет однозначно идентифицировать каждую запись в ней. Как правило, эти поля используются для хранения уникальных идентификаторов объектов, которые перечислены в таблице, например, это может быть ID клиента или товара.
Первичный ключ имеет несколько свойств:

  • каждая запись в таком поле должна быть уникальной;
  • запись в поле не должна быть пустой;
  • в одной таблице может быть только один ключ (существуют также составные ключи, которые могут включать в себя несколько полей, однако в этой статье мы не будем их рассматривать).
Внешний ключ или foreign key

Внешний ключ нужен для того, чтобы связать две разные SQL-таблицы между собой. Внешний ключ таблицы должен соответствует значению первичного ключа таблицы, с которой он связан. Это помогает сохранять согласованность базы данных путем обеспечения так называемой «ссылочной целостности» (referential integrity).

Давайте рассмотрим все это на примере простой базы данных. Для начала нам понадобится создать базу данных. Заходим в MySQL и создаем базу данных, в которой будут храниться записи о книгах в библиотеке:

Так как дальше мы будем работать с этой базой, вводим команду:

И создаем таблицу, в которой будут храниться записи о книгах в библиотеке:

Создание первичного ключа при создании таблицы и с помощью ALTER TABLE

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

Вывод команды будет выглядеть следующим образом:

Первичный ключ при создании таблицы

Вы можете также создать его при создании таблицы, добавив в команду для создания таблицы следующую запись:

В таком случае поле book_id после создания таблицы будет являться первичным ключом для таблицы books.

Создание первичного ключа при помощи ALTER TABLE

Если таблица уже создана, а первичный ключ в ней не указан, вы можете создать ключевое поле, с помощью команды ALTER TABLE. Команда ALTER TABLE помогает изменять уже существующие столбцы, удалять их или добавлять новые. Чтобы определить первичный ключ в поле book_id, выполните команду:

Установка внешнего ключа MySQL при создании таблицы и с помощью ALTER TABLE

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

Внешний ключ при создании таблицы

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

В итоге запрос, которым создается такая таблица будет выглядеть следующим образом:

Создание внешнего ключа при помощи ALTER TABLE

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

Сценарии использования внешнего ключа

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

Каскадное удаление или CASCADE

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

Аналогично работает метод ON UPDATE CASCADE. При попытке изменить значение, записанное в поле первичного ключа, изменение будет применено к внешнему ключу, связанному с данным полем. Этот метод используется крайне редко, так как первичные ключи практически не являются изменяемыми полями.

RESTRICT

Опция RESTRICT позволяет отклонять все запросы на изменение или удаление строк в главной таблице при условии, что в связанной таблице также имеются строки. Задается данное ограничение следующим запросом:

Заключение

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

Как задать foreign key в sql

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

Общий синтаксис установки внешнего ключа на уровне таблицы:

Для создания ограничения внешнего ключа после FOREIGN KEY указывается столбец таблицы, который будет представляет внешний ключ. А после ключевого слова REFERENCES указывается имя связанной таблицы, а затем в скобках имя связанного столбца, на который будет указывать внешний ключ. После выражения REFERENCES идут выражения ON DELETE и ON UPDATE , которые задают действие при удалении и обновлении строки из главной таблицы соответственно.

Например, определим две таблицы и свяжем их посредством внешнего ключа:

В данном случае определены таблицы Customers и Orders. Customers является главной и представляет клиента. Orders является зависимой и представляет заказ, сделанный клиентом. Таблица Orders через столбец CustomerId связана с таблицей Customers и ее столбцом Id. То есть столбец CustomerId является внешним ключом, который указывает на столбец Id из таблицы Customers.

С помощью оператора CONSTRAINT можно задать имя для ограничения внешнего ключа:

ON DELETE и ON UPDATE

С помощью выражений ON DELETE и ON UPDATE можно установить действия, которые выполняются соответственно при удалении и изменении связанной строки из главной таблицы. В качестве действия могут использоваться следующие опции:

CASCADE : автоматически удаляет или изменяет строки из зависимой таблицы при удалении или изменении связанных строк в главной таблице.

SET NULL : при удалении или обновлении связанной строки из главной таблицы устанавливает для столбца внешнего ключа значение NULL . (В этом случае столбец внешнего ключа должен поддерживать установку NULL)

RESTRICT : отклоняет удаление или изменение строк в главной таблице при наличии связанных строк в зависимой таблице.

NO ACTION : то же самое, что и RESTRICT .

SET DEFAULT : при удалении связанной строки из главной таблицы устанавливает для столбца внешнего ключа значение по умолчанию, которое задается с помощью атрибуты DEFAULT. Несмотря на то, что данная опция в принципе доступна, однако движок InnoDB не поддерживает данное выражение.

Каскадное удаление

Каскадное удаление позволяет при удалении строки из главной таблицы автоматически удалить все связанные строки из зависимой таблицы. Для этого применяется опция CASCADE :

Подобным образом работает и выражение ON UPDATE CASCADE . При изменении значения первичного ключа автоматически изменится значение связанного с ним внешнего ключа. Однако поскольку первичные ключи изменяются очень редко, да и с принципе не рекомендуется использовать в качестве первичных ключей столбцы с изменяемыми значениями, то на практике выражение ON UPDATE используется редко.

Установка NULL

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

SQL FOREIGN KEY Constraint

The FOREIGN KEY constraint is used to prevent actions that would destroy links between tables.

A FOREIGN KEY is a field (or collection of fields) in one table, that refers to the PRIMARY KEY in another table.

The table with the foreign key is called the child table, and the table with the primary key is called the referenced or parent table.

Look at the following two tables:

Persons Table
PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20
Orders Table
OrderID OrderNumber PersonID
1 77895 3
2 44678 3
3 22456 2
4 24562 1

Notice that the «PersonID» column in the «Orders» table points to the «PersonID» column in the «Persons» table.

The «PersonID» column in the «Persons» table is the PRIMARY KEY in the «Persons» table.

The «PersonID» column in the «Orders» table is a FOREIGN KEY in the «Orders» table.

The FOREIGN KEY constraint prevents invalid data from being inserted into the foreign key column, because it has to be one of the values contained in the parent table.

SQL FOREIGN KEY on CREATE TABLE

The following SQL creates a FOREIGN KEY on the «PersonID» column when the «Orders» table is created:

SQL Server / Oracle / MS Access:

To allow naming of a FOREIGN KEY constraint, and for defining a FOREIGN KEY constraint on multiple columns, use the following SQL syntax:

MySQL / SQL Server / Oracle / MS Access:

SQL FOREIGN KEY on ALTER TABLE

To create a FOREIGN KEY constraint on the «PersonID» column when the «Orders» table is already created, use the following SQL:

MySQL / SQL Server / Oracle / MS Access:

To allow naming of a FOREIGN KEY constraint, and for defining a FOREIGN KEY constraint on multiple columns, use the following SQL syntax:

Похожие публикации:

  1. Как заполнить таблицу в sql
  2. Как из sql базы 1с сделать файловую
  3. Как импортировать sql базу в phpmyadmin
  4. Как называется реализация языка sql в конкретной субд

Как правильно задать foreign key в SQL Server

Чтобы задать внешний ключ (foreign key) в SQL Server, используйте констрейнт FOREIGN KEY при создании таблицы или в уже существующей таблице с помощью оператора ALTER TABLE.

 -- Пример создания внешнего ключа в новой таблице CREATE TABLE Таблица1 ( Колонка1 INT PRIMARY KEY, Колонка2 INT, FOREIGN KEY (Колонка2) REFERENCES Таблица2(Колонка2) ); -- Пример добавления внешнего ключа в существующую таблицу ALTER TABLE Таблица1 ADD CONSTRAINT FK_Таблица1_Таблица2 FOREIGN KEY (Колонка2) REFERENCES Таблица2(Колонка2); 

Детальный ответ

Как задать foreign key в SQL Server

В SQL Server, foreign key (внешний ключ) используется для связи двух таблиц между собой. Это позволяет установить связь между столбцами одной таблицы и столбцами другой таблицы. Внешний ключ обеспечивает целостность данных и обеспечивает согласованность между связанными таблицами. Чтобы задать внешний ключ в SQL Server, нужно выполнить следующие шаги:

1. Создание таблицы

Перед тем, как задать внешний ключ, необходимо сначала создать таблицу, в которой вы хотите установить связь с другой таблицей. Ниже приведен пример создания таблицы «Orders»:

 CREATE TABLE Orders ( OrderID int PRIMARY KEY, ProductID int, Quantity int ); 

2. Создание связанной таблицы

После создания основной таблицы, необходимо создать таблицу, с которой вы хотите установить связь. Ниже приведен пример создания таблицы «Products»:

 CREATE TABLE Products ( ProductID int PRIMARY KEY, ProductName varchar(255), Price decimal(10, 2) ); 

3. Добавление внешнего ключа

После создания обеих таблиц, вы можете добавить внешний ключ, чтобы связать столбцы таблиц между собой. Для этого используется оператор ALTER TABLE с ключевым словом FOREIGN KEY. Ниже приведен пример добавления внешнего ключа «ProductID» в таблицу «Orders», который ссылается на столбец «ProductID» в таблице «Products»:

 ALTER TABLE Orders ADD FOREIGN KEY (ProductID) REFERENCES Products(ProductID); 

В этом примере «ProductID» — это столбец, который связывает обе таблицы. С помощью ключевого слова FOREIGN KEY мы указываем SQL Server, что столбец «ProductID» является внешним ключом. Затем с помощью ключевого слова REFERENCES мы указываем таблицу и столбец, на который ссылается внешний ключ.

4. Проверка внешнего ключа

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

Пример использования внешнего ключа

Представим, что у нас есть следующие записи в таблице «Products»:

 ProductID | ProductName | Price ------------------------------- 1 | Keyboard | 20.00 2 | Mouse | 10.00 3 | Monitor | 150.00 

А такие записи в таблице «Orders»:

 OrderID | ProductID | Quantity ----------------------------- 1 | 1 | 5 2 | 2 | 3 3 | 4 | 2 

Обратите внимание, что запись с OrderID = 3 имеет несуществующее значение ProductID = 4. При попытке выполнить операцию добавления записи, SQL Server выдаст ошибку, так как она нарушает целостность внешнего ключа. Вот и всё! Теперь вы знаете, как задать внешний ключ в SQL Server. Внешние ключи обеспечивают связи между таблицами и помогают поддерживать целостность данных. Использование внешних ключей является важным аспектом в проектировании баз данных.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *