Создание первичных ключей
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure
Вы можете определить первичный ключ в ядро СУБД SQL Server с помощью SQL Server Management Studio или Transact-SQL. Создание первичного ключа автоматически создает соответствующий уникальный кластеризованный индекс. Однако первичный ключ можно указать как некластеризованный индекс.
Примеры кода Transact-SQL в этой статье используют AdventureWorks2022
базу данных или AdventureWorksDW2022
пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.
Ограничения
Таблица может содержать только одно PRIMARY KEY
ограничение.
Все столбцы, определенные в ограничении PRIMARY KEY
, должны быть определены как NOT NULL
. Если значение NULL не указано, все столбцы, участвующие в PRIMARY KEY
ограничении, имеют значение NULL NOT NULL
.
Разрешения
Для создания новой таблицы с первичным ключом требуется CREATE TABLE
разрешение в базе данных и ALTER
разрешение на схему, в которой создается таблица.
Для создания первичного ключа в существующей таблице требуется ALTER
разрешение на таблицу.
Использование SQL Server Management Studio
- В обозреватель объектов щелкните правой кнопкой мыши таблицу, в которую нужно добавить уникальное ограничение, и выберите "Конструктор".
- В конструкторе таблиц выберите селектор строк для столбца базы данных, который необходимо определить в качестве первичного ключа. Если вы хотите выбрать несколько столбцов, удерживайте клавишу CTRL при выборе селекторов строк для других столбцов.
- Щелкните правой кнопкой мыши средство выбора строк столбца и выберите команду Задать первичный ключ.
Внимание
Чтобы переопределить первичный ключ, необходимо удалить все связи с существующим первичным ключом и только после этого создавать новый первичный ключ. Появится сообщение, предупреждающее об автоматическом удалении в ходе процесса всех существующих связей.
Ключевой столбец-источник идентифицируется символом первичного ключа в соответствующем селекторе строк.
Если первичный ключ состоит более чем из одного столбца, то в одном столбце могут встречаться дублирующиеся значения, но все сочетания значений изо всех столбцов первичного ключа должны быть уникальными.
При определении составного ключа порядок столбцов в первичном ключе совпадает с порядком столбцов, показанным в таблице. Однако после создания первичного ключа порядок столбцов можно изменить. Дополнительные сведения см. в разделе Изменение первичных ключей.
Использование Transact-SQL
Создание первичного ключа в существующей таблице
В следующем примере создается первичный ключ в столбце TransactionID
AdventureWorks2022
базы данных.
ALTER TABLE [Production].[TransactionHistoryArchive]
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);
Создание первичного ключа в новой таблице
В следующем примере создается таблица и определяется первичный ключ столбца TransactionID
AdventureWorks2022
в базе данных.
CREATE TABLE [Production].[TransactionHistoryArchive1] (
TransactionID INT IDENTITY(1, 1) NOT NULL,
CONSTRAINT PK_TransactionHistoryArchive1_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
);
Создание некластеризованного первичного ключа с отдельным кластеризованным индексом в новой таблице
В следующем примере создается таблица в AdventureWorks2022
базе данных с некластеризованным первичным ключом в столбце CustomerID
. Затем он добавляет кластеризованный индекс.TransactionID
Создайте таблицу для добавления кластеризованного индекса.
CREATE TABLE [Production].[TransactionHistoryArchive1] ( CustomerID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID(), TransactionID INT IDENTITY(1, 1) NOT NULL, CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID) );
Теперь добавьте кластеризованный индекс.
CREATE CLUSTERED INDEX CIX_TransactionID ON [Production].[TransactionHistoryArchive1] (TransactionID);