【SQL Server】主キー(PRIMARY KEY)の作成・削除・無効化・有効化の方法を徹底解説
SQL Serverにおける主キー(PRIMARY KEY)の作成、削除、無効化、有効化の方法を、構文と具体的なサンプルコードとともにわかりやすく解説します。データベース設計の基礎となる重要な概念なので、ぜひマスターしておきましょう。
SQL Serverの主キー(PRIMARY KEY)とは?
SQL Server(Transact-SQL)における主キーとは、テーブル内の1件のレコードを一意に識別するための、1つまたは複数のフィールド(列)の組み合わせです。主キーを構成するフィールドにはNULL値を含めることができない点に注意してください。また、1つのテーブルに設定できる主キーは1つだけです。
主キーは「CREATE TABLE」文または「ALTER TABLE」文を使って定義できます。それぞれの方法を順番に見ていきましょう。
主キーの作成①:CREATE TABLE文を使う方法
テーブルを新規作成するときに主キーを定義する場合は、CREATE TABLE文を使用します。
基本構文
CREATE TABLE テーブル名
(
列1 データ型 [ NULL | NOT NULL ] [ PRIMARY KEY ],
列2 データ型 [ NULL | NOT NULL ],
...
);
または、CONSTRAINT句を使って次のように記述することもできます。
CREATE TABLE テーブル名
(
列1 データ型 [ NULL | NOT NULL ],
列2 データ型 [ NULL | NOT NULL ],
...
CONSTRAINT 制約名 PRIMARY KEY (列1, 列2, ... 列n)
);
サンプル:単一列の主キーを作成する
CREATE TABLE shain
(
shain_id INT PRIMARY KEY,
sei VARCHAR(50) NOT NULL,
mei VARCHAR(50) NOT NULL,
kyuryo MONEY
);
この例では、社員テーブル(shain)の主キーとして「shain_id」という1つの列を指定しています。同じ内容は、CONSTRAINT句を使って次のように書くことも可能です。
CREATE TABLE shain
(
shain_id INT,
sei VARCHAR(50) NOT NULL,
mei VARCHAR(50) NOT NULL,
kyuryo MONEY,
CONSTRAINT shain_pk PRIMARY KEY (shain_id)
);
サンプル:複数列からなる複合主キーを作成する
続いて、2つ以上の列を組み合わせた主キー(複合主キー)を作成する例を見てみましょう。
CREATE TABLE shain
(
sei VARCHAR(50) NOT NULL,
mei VARCHAR(50) NOT NULL,
kyuryo MONEY,
CONSTRAINT shain_pk PRIMARY KEY (sei, mei)
);
この例では、「sei(姓)」と「mei(名)」の2つの列で構成される主キーを作成しています。この2つの列の組み合わせによって、テーブル内の各レコードが一意に識別されます。
主キーの作成②:ALTER TABLE文を使う方法
すでに存在するテーブルに主キーを追加する場合は、ALTER TABLE文を使用します。ただし、ALTER TABLE文で主キーを作成できるのは、NOT NULLとして定義されている列のみです。NULLを許容する列に対しては、テーブルを削除して再作成しない限り、主キーを追加できないので注意が必要です。
基本構文
ALTER TABLE テーブル名
ADD CONSTRAINT 制約名 PRIMARY KEY (列1, 列2, ... 列n);
サンプル:既存テーブルに主キーを追加する
ALTER TABLE shain
ADD CONSTRAINT shain_pk PRIMARY KEY (shain_id);
この例では、既存のshainテーブルに対して、shain_id列を含む主キーを作成しています。ここで重要なのは、shain_id列が事前にNOT NULLとして定義されている必要があるという点です。もしNULLが許容されている場合は、一度テーブルを削除して再作成し、その際にこの列をNOT NULLとして定義し直さなければなりません。
もちろん、複数列の主キーも同様に追加できます。
ALTER TABLE shain
ADD CONSTRAINT shain_pk PRIMARY KEY (sei, mei);
この場合、テーブルの主キーは姓と名の2つの列で構成され、両方の列がNOT NULLとして定義されている必要があります。
主キーの削除方法
不要になった主キーは、ALTER TABLE文のDROP CONSTRAINT句で削除できます。
基本構文
ALTER TABLE テーブル名
DROP CONSTRAINT 制約名;
サンプル
ALTER TABLE shain
DROP CONSTRAINT shain_pk;
上記の例では、shainテーブルから主キー制約(shain_pk)を削除しています。
主キーの無効化方法
SQL Serverでは、主キーは内部的にインデックスとして管理されています。そのため、ALTER INDEX文を使えば、主キーインデックスを一時的に無効化できます。
基本構文
ALTER INDEX 制約名 ON テーブル名
DISABLE;
サンプル
ALTER INDEX shain_pk ON shain
DISABLE;
上記の例では、shainテーブルの主キーを無効化しています。
主キーの有効化(再構築)方法
無効化した主キーを再度有効にするには、ALTER INDEX文でREBUILDオプションを実行します。
基本構文
ALTER INDEX 制約名 ON テーブル名
REBUILD;
サンプル
ALTER INDEX shain_pk ON shain
REBUILD;
上記の例では、shainテーブルの主キーインデックスを再構築し、再び有効化しています。
まとめ
SQL Serverの主キーは、テーブルの各レコードを一意に識別するために欠かせない制約です。ポイントを整理すると以下のようになります。
- 主キーにはNULL値を設定できず、1テーブルにつき1つだけ定義できる
- テーブル作成時はCREATE TABLE文、既存テーブルへの追加はALTER TABLE文を使用する
- ALTER TABLE文で追加できるのは、NOT NULL定義の列のみ
- 主キーの無効化は「ALTER INDEX ~ DISABLE」、再有効化は「ALTER INDEX ~ REBUILD」で行う
NULL値の扱いや列の定義状態に注意しながら、適切に主キーを設計・運用していきましょう。
-
SQL Serverで外部キー(Foreign Key)を有効化する方法
SQL Serverにおいて、FOREIGN KEY(外部キ)が無効化されている場合、ALTER TABLEコマンドを使って再度有効化(再有効化)することができます。 SQL Serverで外部キーを有効化する構文 ALTER TABLE ten_bang CHECK CONSTRAINT fk_ten; パラメータの説明 ten_bang外部キーが作成されているテーブルの名前を指定します。 fk_ten有効化したい外部キーの名前を指定します。 具体例 まず、親テーブルと子テーブルを作成してみましょう。 CREATE TABLE sanpham ( id_sanpham INT PRIM
-
MS SQL Serverとは?特徴・主な用途・バージョン履歴・インスタンスの基インスタンスの基礎を徹底解説
SQL Server(MS SQL Server)とは? SQL Serverは、Microsoftが開発したリレーショナルデータベース管理システム(RDBMS)です。従来のRDBMSの枠組みにとどまらず、オブジェクト指向の概念も取り入れたORDBMS(オブジェクトリレーショナルデータベース管理システム)としての側面も併せ持っています。主な特徴は以下の通りです。 Microsoftが開発したRDBMSベースのデータベースソフトウェアである ORDBMS(オブジェクトリレーショナルデータベース管理システム)としても機能する 特定のプラットフォームに依存しない独立した環境で動作する コマンドライ