CREATE TABLE dbo.t_MetricBook
(
MetricSetID smallint NOT NULL,
BookID smallint NOT NULL,
ReportingCcyAmount decimal(18,2) NOT NULL,
CONSTRAINT PK_t_MetricBook
PRIMARY KEY CLUSTERED (MetricSetID,BookID)
)
解釋:
CONSTRAINT PK_t_MetricBook PRIMARY KEY CLUSTERED (MetricSetID,BookID)
CONSTRAINT :創建約束
PK_t_MetricBook:主鍵的名稱
PRIMARY KEY: 表明創建的是主鍵約束
CLUSTERED :表示索引類型是聚集索引
---------------------------------------
詳細介紹
在創建Table設定主鍵的時候,SQL Server會自動創建一個對應的Clustered Index。如果使用Microsoft SQL Server Management Studio工具,發現這個Clustered Index只能刪除,不能通過界面進行修改。這讓人誤以為在主鍵上只能建立Clustered Index, 實際上卻不是這樣的。
如果通過Script 創建,我們可以指定在主鍵上建立Clustered / Non-Clustered Index。示例如下:
CREATE TABLE [dbo].[table_1](
[id] [int] NOT NULL,
PRIMARY KEY
(
[id] ASC
))
CREATE TABLE [dbo].[table_2](
[id] [int] NOT NULL,
PRIMARY KEY NONCLUSTERED
(
[id] ASC
))
table_1 上將默認建立Clustered Index, table_2則建立的是Non Clustered Index。
對於已經建立主鍵的Table,如果要改成Non Clustered Index, 可以先刪除主鍵,再重新創建成Non Clustered Index
ALTER TABLE [dbo].[table_1]DROP CONSTRAINT PK__table_1__3213E83F3C0AD43D
go
ALTER TABLE [dbo].[table_1] ADD CONSTRAINT PK__table_1__3213E83F3C0AD43D
PRIMARY KEY NONCLUSTERED (id)
go
在創建Table的時候,也可以同時設定一個欄位為主鍵,而另外一個欄位是Clustered index.
CREATE TABLE [dbo].[table_3]
(id INT NOT NULL PRIMARY KEY,
col1 INT NOT NULL UNIQUE CLUSTERED)
go
綜上所述,主鍵只是一個Constraint, 主鍵上能夠建立Clustered / Non-Clustered Index, 當然通用的最佳實踐是把主鍵創建為Clustered Index。
---------------------
作者:Cassaba
來源:CSDN
原文:https://blog.csdn.net/cassaba/article/details/52043058
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!