SQL Serverの一意制約(UNIQUE制約)とは?作成・追加・削除の方法を解説
このチュートリアルでは、SQL Serverにおける一意制約(UNIQUE制約)の作成・追加・削除の方法を、サンプルコードとともにわかりやすく解説します。
SQL Serverの一意制約(UNIQUE制約)とは?
一意制約(UNIQUE制約)とは、1つの列、または複数の列の組み合わせによってレコードを一意に識別するための制約です。値の組み合わせ全体が一意であれば、一部の列にNULL値が含まれていても問題ありません。
一意制約と主キー(PRIMARY KEY)の違い
一意制約は主キーとよく似ていますが、NULL値の扱いや設定できる数に違いがあります。
| 項目 | 主キー(PRIMARY KEY) | 一意制約(UNIQUE) |
|---|---|---|
| NULL値 | 主キーを構成する列にはNULL値を含めることができません。 | 値の組み合わせが一意であれば、一部の列にNULL値を含めることができます。 |
| 設定できる数 | 1つのテーブルに1つだけ設定できます。 | 1つのテーブルに複数設定できます。 |
なお、SQL Serverでは一意制約を作成すると、その背後に一意インデックスが自動的に作成されます。
CREATE TABLE文で一意制約を作成する
テーブルを新規作成するときに同時に一意制約を定義する場合は、CREATE TABLE文の中でCONSTRAINT句を使用します。
CREATE TABLE table_name
(
column1 datatype [ NULL | NOT NULL ],
column2 datatype [ NULL | NOT NULL ],
…
CONSTRAINT constraint_name UNIQUE (column1, column2, … column_n)
);
- table_name:作成したいテーブルの名前
- column1, column2…:テーブルに作成する列の名前
- constraint_name:一意制約の名前
- column1, column2… column_n:一意制約を構成する列の名前
例:1つの列に一意制約を設定する
CREATE TABLE shain
(
id_shain INT PRIMARY KEY,
shain_no INT NOT NULL,
sei VARCHAR(50) NOT NULL,
mei VARCHAR(50),
kyuyo MONEY,
CONSTRAINT uq_shain_no UNIQUE (shain_no)
);
この例では、社員情報を管理する「shain」テーブルを作成すると同時に、「shain_no」(社員番号)という1つの列からなる一意制約「uq_shain_no」を定義しています。これにより、同じ社員番号を持つレコードが登録されるのを防ぐことができます。
例:複数の列に一意制約を設定する
一意制約は、複数の列の組み合わせに対して設定することもできます。
CREATE TABLE shain
(
id_shain INT PRIMARY KEY,
shain_no INT NOT NULL,
sei VARCHAR(50) NOT NULL,
mei VARCHAR(50),
kyuyo MONEY,
CONSTRAINT uq_sei_mei UNIQUE (sei, mei)
);
この場合、「sei」(姓)と「mei」(名)の組み合わせが重複しないよう制限されます。姓と名がそれぞれ他のレコードと同じでも、組み合わせとして一意であれば登録可能です。
ALTER TABLE文で一意制約を追加する
すでに存在するテーブルに一意制約を後から追加する場合は、ALTER TABLE文を使用します。
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, … column_n);
- table_name:一意制約を追加したいテーブルの名前
- constraint_name:作成する一意制約の名前
- column1, column2… column_n:一意制約を構成する列の名前
例
ALTER TABLE shain
ADD CONSTRAINT uq_shain_no UNIQUE (shain_no);
この例では、既存の「shain」テーブルに対して、「shain_no」列に一意制約「uq_shain_no」を追加しています。複数の列に一意制約を設定する場合は、以下のように記述します。
ALTER TABLE shain
ADD CONSTRAINT uq_sei_mei UNIQUE (sei, mei);
一意制約を削除する
不要になった一意制約を削除する場合も、ALTER TABLE文を使用します。
構文
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
- table_name:一意制約を削除したいテーブルの名前
- constraint_name:削除したい一意制約の名前
例
ALTER TABLE shain
DROP CONSTRAINT uq_shain_no;
この例では、「shain」テーブルから一意制約「uq_shain_no」を削除しています。
まとめ
一意制約(UNIQUE制約)を使うことで、特定の列または列の組み合わせに重複したデータが登録されるのを防ぐことができます。主キーとは異なりNULL値を許容し、1つのテーブルに複数設定できる点が特徴です。テーブル作成時にはCREATE TABLE文を、既存テーブルへの追加や削除にはALTER TABLE文を使用します。
-
【SQL Server入門】ストアドプロシージャの作成と削除方法を徹底解説
プロシージャ(Procedure)とは、データベース内に保存しておき、後から再利用できる複数のステートメントで構成されたプログラムのことです。SQL Serverでは、プロシージャにパラメータを渡すことが可能です。関数のように特定の値を返すわけではありませんが、実行の成功・失敗を示す役割を持ちます。 本記事では、SQL Serverにおけるプロシージャの作成方法と削除方法について、基本構文と具体例を交えながらわかりやすく解説します。 CREATE PROCEDURE(プロシージャの作成) 構文 SQL Serverでプロシージャを作成するには、以下の構文を使用します。 CREATE {
-
MS SQL Serverとは?特徴・主な用途・バージョン履歴・インスタンスの基インスタンスの基礎を徹底解説
SQL Server(MS SQL Server)とは? SQL Serverは、Microsoftが開発したリレーショナルデータベース管理システム(RDBMS)です。従来のRDBMSの枠組みにとどまらず、オブジェクト指向の概念も取り入れたORDBMS(オブジェクトリレーショナルデータベース管理システム)としての側面も併せ持っています。主な特徴は以下の通りです。 Microsoftが開発したRDBMSベースのデータベースソフトウェアである ORDBMS(オブジェクトリレーショナルデータベース管理システム)としても機能する 特定のプラットフォームに依存しない独立した環境で動作する コマンドライ