建立主索引鍵
適用於:SQL Server 2016 (13.x) 和更新版本 Azure SQL 資料庫 Azure SQL 受控執行個體
您可以使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 資料庫引擎中定義主索引鍵。 建立主索引鍵會自動建立對應的唯一叢集索引。 不過,主索引鍵可以改為指定為非叢集索引。
本文 Transact-SQL 程式碼範例使用 AdventureWorks2022
或 AdventureWorksDW2022
範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。
限制
一份資料表只能有一個 PRIMARY KEY
條件約束。
PRIMARY KEY
條件約束內所定義的所有資料行,都必須定義成 NOT NULL
。 如果未指定可 NULL 性,參與 PRIMARY KEY
條件約束的所有資料行可 NULL 性都會設成 NOT NULL
。
權限
建立具有主索引鍵的新資料表,需要資料庫中的 CREATE TABLE
權限及建立資料表的結構描述之 ALTER
權限。
在現有資料表中建立主索引鍵需要此資料表的 ALTER
權限。
使用 SQL Server Management Studio
- 在物件總管中,以滑鼠右鍵按一下要加入 Unique 條件約束的資料表,然後選取 [設計]。
- 在 [資料表設計工具] 中,選取要定義為主索引鍵的資料庫資料行的資料列選取器。 若要選取多個資料行,請按住 CTRL 鍵,同時選取其他資料行的資料列選取器。
- 在資料行的資料列選取器中,按一下滑鼠右鍵,然後選取 [設定主索引鍵]。
警告
若要重新定義主索引鍵,必須在建立新的主索引鍵前,先刪除所有現有主索引鍵的關聯性。 出現訊息警告您,這個程序中會自動刪除現有的關聯性。
主索引鍵資料行是由資料列選取器中的主索引鍵符號識別。
如果主索引鍵由一個以上的資料行組成,一個資料行中允許有重複的值,但是主索引鍵中所有資料行的組合值必須是唯一的。
如果您定義了複合索引鍵,主索引鍵中的資料行順序必須符合資料表所顯示的資料行順序。 然而,您可以在建立主索引鍵之後變更資料行的順序。 如需詳細資訊,請參閱 修改主索引鍵。
使用 Transact-SQL
在現有的資料表中建立主索引鍵
下列範例會在 AdventureWorks2022
資料庫的 TransactionID
資料行上建立主索引鍵。
ALTER TABLE [Production].[TransactionHistoryArchive]
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);
在新的資料表中建立主索引鍵
下列範例會建立一個資料表,並在 AdventureWorks2022
資料庫的 TransactionID
資料行上定義主索引鍵。
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);