SQL Server Management Studio(SSMS)で主キー/プライマリーキー/PRIMARY KEY 制約を設定する

データベースのテーブルの主キー(プライマリーキー)

今回は、データベースのテーブルに主キー(プライマリーキー)を設定して利用する方法を紹介します。

主キー(プライマリーキー)とは

主キー(プライマリーキー)とは、テーブルの行(レコード)を一意(重複しないで区別)するために設けるキーの制約になります。

主キーはテーブル内の1つのデータ(行)が特定されることをデータベースが保証するための列になります。

主キーはテーブルの1つ以上(1つまたは複数)の列(カラム)に対して設定されます。

主キー列が複数ある場合は、複数の列の値を組み合わせたものが主キーになります。

テーブルに格納されているデータのそれぞれの行を識別する目的で設定されます。

テーブルの主キー(プライマリーキー)の例

例えば、従業員のデータを管理するテーブルがあるとします。

従業員テーブルには、従業員のID、氏名、性別、部署があり、以下のデータが登録されているとします。

データベーステーブルデータ 主キー

従業員は通常、氏名で特定できる場合がほとんどですが、同姓同名の方が同じ企業に勤めていることもあります。

上記の従業員テーブルでは、近藤 一郎さんが2人いますので、氏名でテーブルの1行を特定することができません。

データベーステーブルデータ 主キー

氏名は同じデータが入る可能性があるので、行を特定することができませんが、従業員IDには同じ名前の2人の近藤さんに別々のデータが割り当てられています。

データベーステーブルデータ 主キー

従業員IDであれば、すべての従業員に対して違う値を持っていますので、主キーに指定することができます。

主キー(プライマリーキー)の役割

テーブルの主キーの役割には、大きく以下の2つがあります。

  • データの整合性を保証する
  • データの検索スピードを早くする

主キーを作成すると、主キーが設定された列にインデックスと呼ばれるオブジェクトが作成されます。

インデックスとは、インデックスが指定された列の情報を取り出し、検索用にとりまとめたものです。

インデックスを作成しておくことで、データを高速に探すことができるようになります。

主キーに設定した列は、同じ値を格納することができなくなります。
テーブルを編集して同じ値を登録しようとしても、データベースが不正を検知してエラーを出力します。
また、主キーを設定した列にはNULL値を登録することもできなくなります。

SQL Server Management Studio(SSMS)で主キー(プライマリーキー)を設定する

SQL Server Management Studioで主キーを設定する方法を非常に簡単です。

まず、「オブジェクト エクスプローラー」でテーブルエディターで開きます。

エディターで開くにはテーブルを右クリックして表示されるコンテキストメニューにある「新しいテーブル」をクリックします。(「新しいテーブル」をクリックして表示されたエディターには、列が設定されていませんので、新しいテーブルに作成する列を設定してください。)

既に作成しているテーブルを編集する場合は、編集するテーブルを右クリックして表示されるコンテキストメニューにある「上位 n 行の編集」(すべての行を編集できるようにしている場合は「すべての行の編集」)をクリックします。

テーブルエディターを開いたら主キーを設定する列を右クリックしてコンテキストメニューを表示します。

SSMS テーブルエディターの列を右クリックして表示されるコンテキストメニュー

コンテキストメニューにある「主キーの設定」をクリックします。

SSMS テーブルエディターの列を右クリックして表示されるコンテキストメニューで主キーの設定をクリック

列に主キーを設定すると、設定した列に鍵のマーク(アイコン)が表示され、「NULL を許容」のチェックがOFFになります。

SSMS 主キーを設定したテーブルの列

テーブルを保存して「オブジェクト エクスプローラー」を見ると以下のように主キー(PK)が作成され、インデックスも設定されていることが確認できます。

SSMS オブジェクトエクスプローラーのテーブルの詳細

上記の例で使用した「従業員」テーブルの列定義は以下のようになります。

列名 データ型 NULL 許容 PK
従業員ID int NO 1
氏名 nvarchar(50) YES
性別 nvarchar(10) YES
部署 nvarchar(20) YES

テーブルを作成するSQL(CREATE文)も合わせて掲載しておきます。

SQL

上記のSQLを実行して作成されるテーブルでは、主キーが設定されていませんので、主キーを設定するためのテーブルとして利用してください。