主キー制約とは:
主キー制約は、レコード/行の一意性を確保するために作成されます。主キー制約は、列が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の主キー制約とは何ですか。主キーの作成方法