Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Относится к: SQL Server 2016 (13.x) и более поздние версии
Azure SQL Database
Azure SQL Managed Instance
SQL Database в Microsoft Fabric
Вы можете определить первичный ключ в ядро СУБД SQL Server с помощью SQL Server Management Studio или Transact-SQL. Создание первичного ключа автоматически создает соответствующий уникальный кластеризованный индекс. Однако первичный ключ можно указать как некластеризованный индекс.
Примеры кода в этой статье используют пример базы данных AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать на домашней странице примерах Microsoft SQL Server и проектах сообщества.
Limitations
Таблица может содержать только одно PRIMARY KEY ограничение.
Все столбцы, определенные в ограничении PRIMARY KEY , должны быть определены как NOT NULL. Если значение NULL не указано, все столбцы, участвующие в PRIMARY KEY ограничении, имеют значение NULL NOT NULL.
Permissions
Для создания новой таблицы с первичным ключом требуется CREATE TABLE разрешение в базе данных и ALTER разрешение на схему, в которой создается таблица.
Для создания первичного ключа в существующей таблице требуется ALTER разрешение на таблицу.
Использование SQL Server Management Studio
- В Обозревателе объектов щелкните правой кнопкой мыши таблицу, в которую нужно добавить уникальное ограничение, и выберите "Конструктор".
- В конструкторе таблиц выберите селектор строк для столбца базы данных, который необходимо определить в качестве первичного ключа. Если вы хотите выбрать несколько столбцов, удерживайте клавишу CTRL при выборе селекторов строк для других столбцов.
- Щелкните правой кнопкой мыши селектор строк для столбца и выберите команду Задать первичный ключ.
Caution
Чтобы переопределить первичный ключ, необходимо удалить все связи с существующим первичным ключом и только после этого создавать новый первичный ключ. Появится сообщение, предупреждающее об автоматическом удалении в ходе процесса всех существующих связей.
Столбец первичного ключа идентифицируется символом первичного ключа в его селекторе строк.
Если первичный ключ состоит более чем из одного столбца, то в одном столбце могут встречаться дублирующиеся значения, но все сочетания значений изо всех столбцов первичного ключа должны быть уникальными.
При определении составного ключа порядок столбцов в первичном ключе совпадает с порядком столбцов, показанным в таблице. Однако после создания первичного ключа порядок столбцов можно изменить. Дополнительные сведения см. в разделе Изменение первичных ключей.
Использование Transact-SQL
Создание первичного ключа в существующей таблице
В следующем примере создается первичный ключ в столбце TransactionIDAdventureWorks2025 базы данных.
ALTER TABLE [Production].[TransactionHistoryArchive]
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);
Создание первичного ключа в новой таблице
В следующем примере создается таблица и определяется первичный ключ столбца TransactionIDAdventureWorks2025 в базе данных.
CREATE TABLE [Production].[TransactionHistoryArchive1] (
TransactionID INT IDENTITY(1, 1) NOT NULL,
CONSTRAINT PK_TransactionHistoryArchive1_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
);
Создание некластеризованного первичного ключа с отдельным кластеризованным индексом в новой таблице
В следующем примере создается таблица в AdventureWorks2025 базе данных с некластеризованным первичным ключом в столбце 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);