主キーの作成

適用対象:SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance

SQL Server では、SQL Server Management Studio または Transact-SQL を使用して主キーを定義できます。 主キーを作成すると、指定に従って対応する一意なクラスター化または非クラスター化インデックスが自動的に作成されます。

はじめに

制限事項と制約事項

  • テーブルに含めることができる PRIMARY KEY 制約は 1 つだけです。

  • PRIMARY KEY 制約中で定義する列はすべて、NOT NULL として定義する必要があります。 NULL 値を許容するかどうかを指定しない場合、PRIMARY KEY 制約の影響を受けるすべての列は NOT NULL に設定されます。

セキュリティ

アクセス許可

主キーが設定された、新しいテーブルを作成するには、データベースの CREATE TABLE 権限と、テーブルを作成するスキーマの ALTER 権限が必要です。

既存のテーブルに主キーを作成するには、テーブルに対する ALTER 権限が必要です。

SQL Server Management Studio を使用する

主キーを作成する

  1. オブジェクト エクスプローラーで、UNIQUE 制約を追加するテーブルを右クリックし 、[デザイン] をクリックします。
  2. テーブル デザイナーで、主キーとして定義するデータベース列の行セレクターをクリックします。 複数列を選択する場合は、Ctrl キーを押しながら、他の列の行セレクターをクリックします。
  3. 列の行セレクターを右クリックし、 [主キーの設定]をクリックします。

注意事項

主キーを再定義する場合は、新しい主キーを作成する前に、既存の主キーに対するリレーションシップをすべて削除する必要があります。 再定義中に、既存のリレーションシップが自動的に削除されることを警告するメッセージが表示されます。

主キー列は、行セレクターに主キーの記号で示されます。

主キーが複数の列で構成される場合、1 つの列では重複した値が許可されますが、主キーのすべての列の値の組み合わせは一意である必要があります。

複合キーを定義する場合は、主キーの列の順序が、テーブルに表示される列の順序と同じになります。 ただし、主キー作成後に列の順序を変更することもできます。 詳細については、「 主キーの変更」を参照してください。

Transact-SQL の使用

既存のテーブルに主キーを作成する

次の例では、AdventureWorks データベースの列 TransactionID に主キーを作成します。

ALTER TABLE Production.TransactionHistoryArchive
   ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID);

新しいテーブルに主キーを作成する

次の例では、AdventureWorks データベース内で、テーブルを作成して列 TransactionID に主キーを定義します。

CREATE TABLE Production.TransactionHistoryArchive1
   (
      TransactionID int IDENTITY (1,1) NOT NULL
      , CONSTRAINT PK_TransactionHistoryArchive1_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
   )
;

新しいテーブルにクラスター化インデックス付きの主キーを作成する

次の例では、AdventureWorks データベース内で、テーブルを作成して CustomerID 列に主キーを、TransactionID にクラスター化インデックスを定義します。

-- Create table to add the clustered index
CREATE TABLE Production.TransactionHistoryArchive1
   (
      CustomerID uniqueidentifier DEFAULT NEWSEQUENTIALID()
      , TransactionID int IDENTITY (1,1) NOT NULL
      , CONSTRAINT PK_TransactionHistoryArchive1_CustomerID PRIMARY KEY NONCLUSTERED (CustomerID)
   )
;

-- Now add the clustered index
CREATE CLUSTERED INDEX CIX_TransactionID ON Production.TransactionHistoryArchive1 (TransactionID);

次のステップ