English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、SQL制約の使用方法を学びます。
制約は、テーブルの1列または複数の列に対して、その列に格納できる値の種類を制限するものであり、データベーステーブル内のデータの正確性と完全性を維持するための標準的なメカニズムを提供します。
SQLには、制約として以下のようないくつかの異なる種類があります:
今、各制約について詳しく説明します。
NOT NULL制約は、指定された列にNULL値を受け入れないことを制限します。
これは、列にNOT NULL制約が適用されている場合、新規行をテーブルに挿入する際にその列にNULL値を追加することはできないことを意味します。
以下のSQL文は、名前が「personのテーブルに4つの列があり、そのうち3つの列id、nameとphoneNULL値を受け入れません。
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制約は、テーブル内の行の値をユニークに識別する列や列のセットを示します。テーブルの各行は同じ主キー値を持つことはできません。同様に、主キー列に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制約と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制約が指定された列のデフォルト値です。
のデフォルト値は、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'
外键制約(FOREIGN KEY)
が示されています。外键(FK)は、2つのテーブル間のデータ関係を構築し強化するための列または列の組み合わせです。従業員(employees)との)departments(employeesのdept_id主キー列と一致することで、departmentsテーブルのdept_idがの列名前のテーブルののテーブル。
MySQLでは、以下のようにFOREIGN KEYを定義してテーブルを作成する際に外键を作成できます。以下の文は、employeesのdept_idテーブルのdepartmentsのdept_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制約を作成することで、値が以下の範囲内であることを許可する制約を作成できます。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子句を解析しますが、無視します。