English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL制約(Constraints)

このチュートリアルでは、SQL制約の使用方法を学びます。

制約とは何ですか?

制約は、テーブルの1列または複数の列に対して、その列に格納できる値の種類を制限するものであり、データベーステーブル内のデータの正確性と完全性を維持するための標準的なメカニズムを提供します。

SQLには、制約として以下のようないくつかの異なる種類があります:

今、各制約について詳しく説明します。

NOT NULL制約

NOT NULL制約は、指定された列にNULL値を受け入れないことを制限します。

これは、列にNOT NULL制約が適用されている場合、新規行をテーブルに挿入する際にその列にNULL値を追加することはできないことを意味します。

以下のSQL文は、名前が「personのテーブルに4つの列があり、そのうち3つの列idnamephoneNULL値を受け入れません。

CREATE TABLE persons (
    id INT NOT NULL,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    ) NOT NULL,15) NOT NULL
);

注意:NULLはゼロや空文字列や長さが0の文字列(例えば'')とは異なります。NULLはまだ入力されていないことを示します。

主キー制約(PRIMARY KEY)

PRIMARY KEY制約は、テーブル内の行の値をユニークに識別する列や列のセットを示します。テーブルの各行は同じ主キー値を持つことはできません。同様に、主キー列にNULL値を入力することもできません。

以下のSQL文は、名前が「personsテーブルに指定し、id主キーとして指定された列は、NULLや重複の値を受け入れません。

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    ) NOT NULL,15) NOT NULL
);

ヒント:主キーは通常、テーブルの一行の値をユニークに識別する一列で構成されていますが、複数の列で構成することもできます。例えば、従業員のメールアドレスや割り当てられた識別番号は、従業員テーブルの論理的な主キーです。

ユニーク制約(UNIQUE)

UNIQUE制約は、テーブル内に一意の値を含む一列または複数の列を制限します。

UNIQUE制約とPRIMARY KEY制約はどちらもユニーク性を強制しますが、列や列の組み合わせ(主キーではなく)のユニーク性を強制する場合は、制約を使用してください。

以下のSQL文は、名前が「personsテーブルに指定し、phone列がユニークと指定されます。これは、このフィールドに重複する値が許可されないことを意味します。

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    ) NOT NULL,15) NOT NULL UNIQUE
);

注意:テーブル上で複数のUNIQUE制約を定義できますが、PRIMARY KEY制約は1つのみです。また、PRIMARY KEY制約とは異なり、UNIQUE制約はNULL値を許可します。

デフォルト制約(DEFAULT)

DEFAULT制約が指定された列のデフォルト値です。

のデフォルト値は、INSERT文が特定の値を明示的に割り当てられていない場合、データベースエンジンは列に挿入される値を自動的に選択します。

以下のSQL文は「 国/地域”列にデフォルト値を設定する。

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    ) NOT NULL,15phone VARCHAR(
    ) NOT NULL UNIQUE,3country VARCHAR(
);

注意:0) NOT NULL DEFAULT 'Australia'

テーブル列をNOT NULLに定義し、デフォルト値を割り当てた場合、INSERT文でその列に値を明示的に割り当てる必要はありません。新しい行をテーブルに挿入できます。

外键制約(FOREIGN KEY)

が示されています。外键(FK)は、2つのテーブル間のデータ関係を構築し強化するための列または列の組み合わせです。従業員(employees)departmentsemployeesdept_id主キー列と一致することで、departmentsテーブルのdept_idがの列名前のテーブルのテーブル。

MySQLでは、以下のようにFOREIGN KEYを定義してテーブルを作成する際に外键を作成できます。以下の文は、employeesdept_idテーブルのdepartmentsdept_id列。

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

チェック制約(CHECK)

CHECK制約は、列に格納できる値を制限するために使用されます。

例えば、給与カラムの値の範囲を制限するCHECK制約を作成することで、値が以下の範囲内であることを許可する制約を作成できます。3、000から10、000の範囲内です。これにより、通常の給与範囲を超える給与の入力を防ぐことができます。例えば:

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT NOT NULL CHECK (salary >= 3000 AND salary <= 10000),
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

注意: MySQLはSQLチェック制約をサポートしていません。 しかし、MySQLのすべてのストレージエンジンはCHECK子句を解析しますが、無視します。