Создание связей по внешнему ключу — SQL Server
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
Применимо к: SQL Server 2016 (13.x) и более поздние версии База данных SQL Azure Управляемый экземпляр Azure SQL
В этой статье описывается, как создать отношения внешнего ключа в SQL Server с помощью SQL Server Management Studio или Transact-SQL. Вы создаете связь между двумя таблицами, когда хотите связать строки одной таблицы со строками другой.
Разрешения
Для создания новой таблицы с внешним ключом требуется разрешение CREATE TABLE в базе данных и разрешение ALTER на схему, в которой создается таблица.
Для создания внешнего ключа в существующей таблице требуется разрешение ALTER для этой таблицы.
Пределы и ограничения
Ограничение внешнего ключа не обязательно должно быть связано только с ограничением первичного ключа в другой таблице. Внешние ключи также могут быть определены для ссылки на столбцы ограничения UNIQUE в другой таблице.
Когда в столбец ограничения FOREIGN KEY вводится значение, отличное от NULL, это значение должно существовать в указанном столбце. В противном случае возвращается сообщение об ошибке нарушения внешнего ключа. Чтобы убедиться, что все значения ограничения составного внешнего ключа проверены, укажите NOT NULL во всех участвующих столбцах.
Ограничения FOREIGN KEY могут ссылаться только на таблицы в одной и той же базе данных на одном сервере. Ссылочная целостность между базами данных должна быть реализована с помощью триггеров. Дополнительные сведения см. в разделе СОЗДАНИЕ ТРИГГЕРА.
Ограничения FOREIGN KEY могут ссылаться на другой столбец в той же таблице и называются самоссылками.
Ограничение FOREIGN KEY, указанное на уровне столбца, может отображать только один ссылочный столбец. Этот столбец должен иметь тот же тип данных, что и столбец, для которого определено ограничение.
Ограничение FOREIGN KEY, указанное на уровне таблицы, должно иметь то же количество столбцов ссылок, что и количество столбцов в списке столбцов ограничения. Тип данных каждого ссылочного столбца также должен быть таким же, как у соответствующего столбца в списке столбцов.
Компонент Database Engine не имеет предопределенного ограничения на количество ограничений FOREIGN KEY, которые таблица может содержать и которые ссылаются на другие таблицы. Компонент Database Engine также не ограничивает количество ограничений FOREIGN KEY, принадлежащих другим таблицам, которые ссылаются на конкретную таблицу. Однако фактическое количество используемых ограничений FOREIGN KEY ограничено конфигурацией оборудования, а также дизайном базы данных и приложения.
- Для операций DELETE и UPDATE DML поддерживается более 253 ссылок на внешние ключи. Операции MERGE не поддерживаются.
- Таблица со ссылкой внешнего ключа на себя по-прежнему ограничена 253 ссылками внешнего ключа.
- Более 253 ссылок на внешние ключи в настоящее время недоступны для индексов columnstore, таблиц, оптимизированных для памяти, или базы данных Stretch.
Важно
База данных Stretch устарела в SQL Server 2022 (16.x). Эта функция будет удалена в будущей версии Microsoft SQL Server. Избегайте использования этой функции в новых разработках и планируйте модифицировать приложения, которые в настоящее время используют эту функцию.
Ограничения FOREIGN KEY не применяются к временным таблицам.
Если внешний ключ определен в столбце пользовательского типа CLR, реализация этого типа должна поддерживать двоичный порядок. Дополнительные сведения см. в разделе Пользовательские типы CLR.
Столбец типа varchar(max) может участвовать в ограничении FOREIGN KEY, только если первичный ключ, на который он ссылается, также определен как тип varchar(max) .
Использовать SQL Server Management Studio
В обозревателе объектов щелкните правой кнопкой мыши таблицу, которая будет находиться на стороне внешнего ключа связи, и выберите Дизайн .
Таблица открывается в
В меню Table Designer выберите Отношения . (См. меню Table Designer в заголовке или щелкните правой кнопкой мыши пустое место определения таблицы, затем выберите Отношения. .. .)
В диалоговом окне Отношения по внешнему ключу выберите Добавить .
Отношение появляется в списке Selected Relationship с предоставленным системой именем в формате FK_< tablename >_< tablename >, где первое tablename — это имя таблицы внешнего ключа, а second tablename — это имя таблицы первичного ключа. Это просто принятое по умолчанию и общепринятое соглашение об именах для (имя) поле объекта внешнего ключа.
Выберите отношение в списке Выбранное отношение .
Выберите Спецификация таблиц и столбцов в сетке справа и выберите многоточие ( … ) справа от свойства.
В диалоговом окне Таблицы и столбцы в раскрывающемся списке Первичный ключ выберите таблицу, которая будет на стороне первичного ключа отношения.
В таблице ниже выберите столбцы, составляющие первичный ключ таблицы. В соседней ячейке сетки справа от каждого столбца выберите соответствующий столбец внешнего ключа таблицы внешнего ключа.
Table Designer предлагает имя связи. Чтобы изменить это имя, отредактируйте содержимое текстового поля Имя связи .
Выберите OK , чтобы создать связь.
Закройте окно конструктора таблиц и Сохраните ваши изменения, чтобы изменение отношения внешнего ключа вступило в силу.
Create a foreign key in a new table
Use Transact-SQL
The following example creates a table and defines a foreign key constraint on the column TempID
that references the column SalesReasonID
in the Sales.SalesReason
таблицу в базе данных AdventureWorks
. Предложения ON DELETE CASCADE и ON UPDATE CASCADE используются для обеспечения того, чтобы изменения, внесенные в 9Таблица 0185 Sales. SalesReason автоматически распространяется на таблицу Sales.TempSalesReason
.
CREATE TABLE Sales.TempSalesReason ( TempID int NOT NULL, имя nvarchar(50) , CONSTRAINT PK_TempSales ПЕРВИЧНЫЙ КЛЮЧ НЕКЛАСТЕРНЫЙ (TempID) , CONSTRAINT FK_TempSales_SalesReason ВНЕШНИЙ КЛЮЧ (TempID) ССЫЛКИ Sales.SalesReason (SalesReasonID) НА УДАЛЕНИЕ КАСКАД НА КАСКАД ОБНОВЛЕНИЙ ) ;
Создание внешнего ключа в существующей таблице
Используйте Transact-SQL
В следующем примере создается внешний ключ для столбца TempID
и ссылка на столбец SalesReasonID
в таблице Sales.SalesReason
в базе данных AdventureWorks
.
ИЗМЕНЕНИЕ ТАБЛИЦЫ Sales.TempSalesReason ДОБАВИТЬ ОГРАНИЧЕНИЕ FK_TempSales_SalesReason ВНЕШНИЙ КЛЮЧ (TempID) ССЫЛКИ Sales.SalesReason (SalesReasonID) НА УДАЛЕНИЕ КАСКАД НА КАСКАД ОБНОВЛЕНИЙ ;
Следующие шаги
- Ограничения первичного и внешнего ключей
- GRANT Права доступа к базе данных
- ИЗМЕНИТЬ ТАБЛИЦУ
- СОЗДАТЬ ТАБЛИЦУ
- ALTER TABLE table_constraint.
Обратная связь
Просмотреть все отзывы о странице
Oracle Energy and Water — Документация
- Домашняя страница
- Промышленность
- Энергия и вода
Oracle Energy and Water предлагает лучшие в своем классе решения для повышения надежности, обслуживания и безопасности электроснабжения, природного газа и водоснабжения по всему миру. Используйте эти ресурсы, чтобы начать работу с нашими приложениями Oracle Utilities, Oracle Utilities Opower и Oracle Energy and Water.
Облачные службы
Выберите ссылку ниже, чтобы получить доступ к документации по продукту и материалам о готовности к выпуску облачной службы.Energy and Water Cloud Services
Локальные приложения
Выберите ссылку ниже, чтобы получить доступ ко всей документации по продукту и материалам выпуска для локального приложения.
Все другие локальные приложения и выпуски
Выберите ссылку ниже, чтобы получить доступ к библиотекам документации для всех других локальных приложений и выпусков.