SQL Server
 Computer >> コンピューター >  >> プログラミング >> SQL Server

【SQL Server】CHECK制約とは?作成・削除・有効化・無効化の方法を徹底解説

SQL ServerにおけるCHECK制約(チェック制約)とはどのようなもので、何のために、どのように使用するのでしょうか。本記事では、その基本から実践的な使い方まで、具体例を挙げながら分かりやすく解説します。

SQL ServerのCHECK制約とは

SQL Server(Transact-SQL)におけるCHECK制約とは、テーブルの各行に対して満たすべき条件を定義できる制約のことです。INSERTやUPDATEの際に指定した条件が成立しないデータを自動的に拒否することで、データベースの整合性を保つことができます。

CHECK制約を使う際の注意点

  1. CHECK制約は、SQLビューでは定義できません。
  2. テーブルのCHECK制約が参照できるのは、そのテーブル内の列のみです。他のテーブルの列を参照することはできません。
  3. CHECK制約の中でサブクエリを使用することはできません。
  4. CHECK制約は、CREATE TABLE文またはALTER TABLE文で定義できます。

CREATE TABLEでCHECK制約を作成する方法

テーブルを新規作成するときに、同時にCHECK制約を定義することができます。

構文

CREATE TABLE テーブル名
(
  列1 データ型 [ NULL | NOT NULL ],
  列2 データ型 [ NULL | NOT NULL ],
  ...

  CONSTRAINT 制約名
    CHECK [ NOT FOR REPLICATION ] (条件)
);

パラメータの説明

  • テーブル名: CHECK制約を作成したいテーブルの名前です。
  • 制約名: CHECK制約に付けたい任意の名前です。
  • 列: CHECK制約を適用するテーブルの列です。
  • 条件: データが満たすべき条件式です。

例1:IDの範囲を制限する

CREATE TABLE employees
(
  employee_id INT NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  first_name VARCHAR(50),
  salary MONEY,
  CONSTRAINT chk_employee_id
    CHECK (employee_id BETWEEN 1 AND 10000)
);

この例では、CREATE TABLE文によって「chk_employee_id」という名前のCHECK制約を作成しています。これにより、employee_id列には必ず1〜10000の間の値しか格納できなくなります。

例2:給与が正の値であることを保証する

CREATE TABLE employees
(
  employee_id INT NOT NULL,
  last_name VARCHAR(50) NOT NULL,
  first_name VARCHAR(50),
  salary MONEY,
  CONSTRAINT chk_salary
    CHECK (salary > 0)
);

この例では、salary(給与)列に0より大きい値しか登録できないようにするCHECK制約を作成しています。

ALTER TABLEでCHECK制約を追加する方法

すでに存在するテーブルに後からCHECK制約を追加したい場合は、ALTER TABLE文を使用します。

構文

ALTER TABLE テーブル名
ADD CONSTRAINT 制約名
CHECK (条件);

ALTER TABLE employees
ADD CONSTRAINT chk_last_name
CHECK (last_name IN ('Smith', 'Anderson', 'Jonas'));

この例では、既存のemployeesテーブルに対して「chk_last_name」というCHECK制約を追加し、従業員の姓(last_name)に「Smith」「Anderson」「Jonas」のいずれかの値のみ格納できるようにしています。

CHECK制約を削除する方法

不要になったCHECK制約は、DROP CONSTRAINT句で削除できます。

構文

ALTER TABLE テーブル名
DROP CONSTRAINT 制約名;

ALTER TABLE employees
DROP CONSTRAINT chk_last_name;

このコマンドを実行すると、employeesテーブルからchk_last_name制約が完全に削除されます。

CHECK制約を有効化する方法

一度無効化したCHECK制約は、WITH CHECK句を組み合わせて再び有効化できます。

構文

ALTER TABLE テーブル名
WITH CHECK CHECK CONSTRAINT 制約名;

ALTER TABLE employees
WITH CHECK CHECK CONSTRAINT chk_salary;

この例では、employeesテーブルのchk_salary制約を再度有効化しています。「WITH CHECK」を指定して有効化すると、既存データも新しい制約条件に適合しているかどうかが検証される点に注意してください。

CHECK制約を無効化する方法

大量データの一括登録などを行う際に、一時的に制約を無効化したい場合はNOCHECK句を使用します。

構文

ALTER TABLE テーブル名
NOCHECK CONSTRAINT 制約名;

ALTER TABLE employees
NOCHECK CONSTRAINT chk_salary;

この例では、employeesテーブルのchk_salary制約を一時的に無効化しています。無効化されている間は、制約条件を満たさないデータでも挿入・更新が可能になるため、作業完了後は忘れずに再度有効化しましょう。

  1. SQL ServerのPIVOT句とは?クロス集計で行を列に変換する方法を実例付きで解説

    SQL Server(Transact-SQL)では、PIVOT句を使用することで、クロス集計(ピボットテーブル)を作成できます。PIVOT句は、テーブル内の行データを列に変換し、集計結果を見やすい形式で表示するための強力な機能です。 下図は、合計値を計算し、行データを列に変換して表示する例です。 PIVOT句の基本構文 SELECT cot_dautien AS bidanh_cot_dautien, [giatri_chuyen1], [giatri_chuyen2], … [giatri_chuyen_n] FROM ( SELECT bang_nguon.cot1

  2. 【初心者向け】SSMSで学ぶSQL Serverのデータベース基本操作ガイド

    こんにちは!前回の記事では、SSMS(SQL Server Management Studio)を使ってSQL Serverをインストールし、接続を確立する方法をご紹介しました。 今回はその続きとして、SQL Server Management Studio(SSMS)の画面操作を通じて、SQL Serverにおけるデータベースの最も基本的な操作方法について詳しく解説していきます。それでは早速始めましょう! #1. 新しいデータベースを作成する 手順1:SQL Serverに接続する まず、SQL Server Management Studioを起動し、SQL Serverに接続します。