主キー制約とは:
主キー制約は、レコード/行の一意性を確保するために作成されます。主キー制約は、列がNull値を許可しない限り、単一または列のセットで作成できます。1)主キー制約は、まだ存在しない場合、デフォルトでクラスター化インデックスを作成します> 新しいテーブルを作成していて、主キーを使用して列を追加したとすると、クラスター化インデックスが作成されます。
以下の例では、テーブルdbo.Customerを作成し、主キー制約としてCustomerIdを追加しています。作成されるインデックスのタイプを確認しましょう。
USE YourDatabaseName GO CREATE TABLE dbo.Customer ( Customerid INT PRIMARY KEY ,FName VARCHAR(100) ,LName VARCHAR(100) ,SSN VARCHAR(10) )
sys.indexesシステムビューをクエリして、インデックス情報を取得できます
SELECT * FROM sys.indexes WHERE object_name(object_id) = 'Customer'
このテーブルには以前はクラスターインデックスがなかったため、クラスター化インデックスが作成されていることがわかります。クラスター化インデックスの名前に気づき、SQLServerによって生成されます。会社が使用している命名規則/標準に従って、インデックスに適切な名前を付けることを常にお勧めします。
2)クラスター化インデックスが列、プライマリにすでに作成されている場合キーは一意のインデックスを作成します クラスタ化インデックスがテーブルの1つまたは複数の列にすでに存在し、主キーを作成しようとすると、一意の非クラスタ化が作成されます。
dbo.Customerテーブルを削除して再作成しましょう。 Null値を受け入れる列にクラスター化インデックスを作成できないため、Null以外の列を定義する必要があります。
USE YourDatabaseName
GO
Drop table dbo.Customer
GO
CREATE TABLE dbo.Customer (
Customerid INT Not Null
,FName VARCHAR(100)
,LName VARCHAR(100)
,SSN VARCHAR(10) Not Null
)
--Create Clustered Index on SSN Column
CREATE CLUSTERED INDEX IX_Customer_SSN
ON dbo.Customer (SSN);
--Create Primary Key on CustomerID
Alter Table dbo.Customer
Add Constraint Pk_Customer_CustomerId Primary Key(CustomerId) sys.indexesシステムビューを使用して、どのタイプのインデックスが作成されるかを確認しましょう。 SSNで作成したクラスター化インデックスが1つあり、主キー制約によって作成される一意の非クラスター化インデックスが1つあるはずです。
SQLServerの主キー制約とは-SQLServer/TSQLチュートリアルビデオデモ:SQLServerの主キー制約とは何ですか。主キーの作成方法