初心者でも分かる!SQL Server 2005で一意制約を作成する方法
SQL Server 2005で一意制約を作成するには、2つの方法があります。
- Transact-SQL (T-SQL) を使用する
- SQL Server Management Studio (SSMS) を使用する
T-SQL を使用する
ALTER TABLE テーブル名 ADD CONSTRAINT 制約名 UNIQUE (列名);
例:
ALTER TABLE 顧客 ADD CONSTRAINT 顧客ID_UNIQUE UNIQUE (顧客ID);
- SSMS でデータベースに接続します。
- 制約を作成するテーブルをツリービューで展開します。
- テーブル名を右クリックし、「デザインビュー」を選択します。
- デザインビューで、「列」グリッドを選択します。
- 一意制約を作成する列の「Is Unique」プロパティを「はい」に設定します。
- ツールバーの「保存」ボタンをクリックします。
一意制約の詳細
- 一意制約は、テーブル内の特定の列の値が重複することを防ぎます。
- 一意制約は、主キーと似ていますが、主キーはNULL値を許容しない一方、一意制約はNULL値を許容します。
- 一意制約は、テーブルのデータの整合性を保つために使用されます。
補足
- 上記の例では、一意制約の名前は「顧客ID_UNIQUE」ですが、これは任意の名前です。
- 一意制約は、複数の列に適用することもできます。
- SQL Server 2005 以外にも、多くのデータベース管理システムで一意制約を作成することができます。
- 一意制約の作成方法は、データベース管理システムによって異なる場合があります。
-- 顧客テーブルを作成
CREATE TABLE 顧客 (
顧客ID INT NOT NULL PRIMARY KEY,
氏名 VARCHAR(50) NOT NULL,
年齢 INT NOT NULL
);
-- 顧客ID列に一意制約を追加
ALTER TABLE 顧客 ADD CONSTRAINT 顧客ID_UNIQUE UNIQUE (顧客ID);
-- 顧客データを追加
INSERT INTO 顧客 (顧客ID, 氏名, 年齢) VALUES (1, '山田太郎', 20);
INSERT INTO 顧客 (顧客ID, 氏名, 年齢) VALUES (2, '佐藤花子', 30);
-- 顧客IDが重複したデータを追加しようとする
INSERT INTO 顧客 (顧客ID, 氏名, 年齢) VALUES (1, '田中一郎', 40);
-- エラーが発生する
-- エラーメッセージ:
-- 違反: PRIMARY KEY または UNIQUE 制約 '顧客ID_UNIQUE' の重複キー。
- ツリービューで「顧客」テーブルを展開します。
- 「顧客」テーブルにデータを追加します。
- 顧客IDが重複したデータを追加しようとします。
- エラーメッセージが表示されます。
- 上記のサンプルコードは、SQL Server 2005 で動作します。
- 他バージョンの SQL Server を使用している場合は、構文が異なる場合があります。
SQL Server 2005で一意制約を作成するその他の方法
ALTER TABLE テーブル名 ADD CONSTRAINT 制約名 CHECK (列名 IS UNIQUE);
ALTER TABLE 顧客 ADD CONSTRAINT 顧客ID_UNIQUE CHECK (顧客ID IS UNIQUE);
UNIQUE インデックスを作成する
CREATE UNIQUE INDEX インデックス名 ON テーブル名 (列名);
CREATE UNIQUE INDEX 顧客ID_UNIQUE ON 顧客 (顧客ID);
メリットとデメリット
方法 | メリット | デメリット |
---|---|---|
T-SQL を使用する | 簡単 | エラーメッセージが分かりにくい |
SSMS を使用する | 直感的 | GUI 操作に慣れていないと時間がかかる |
CHECK 制約を使用する | エラーメッセージが分かりやすい | 制約違反時の処理が複雑になる |
UNIQUE インデックスを作成する | パフォーマンスが向上する | インデックスの管理が必要になる |
sql sql-server constraints