Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Относится к: SQL Server 2016 (13.x) и более поздние версии
База данных SQL Azure
Управляемый экземпляр SQL Azure
SQL Database в Microsoft Fabric
Вы можете определить первичный ключ в ядро СУБД SQL Server с помощью SQL Server Management Studio или Transact-SQL. Создание первичного ключа автоматически создает соответствующий уникальный кластеризованный индекс. Однако первичный ключ можно указать как некластеризованный индекс.
Образцы кода в этой статье используют образцы баз данных AdventureWorks2025, AdventureWorksDW2025 или AdventureWorksLT2025, которые можно скачать из репозитория GitHub Azure Data SQL Samples Repository.
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);