データベース中級者必見!その4〜制約をつけてテーブルを作成する〜

2015/10/19

はじめに

前回はシステム設計などにも用いられるデータベースのER図やテーブル構造書についてご紹介いたしました。
データベース中級者必見!その3〜ER図とテーブル構造書〜

今回は、テーブルを設計する際の制約についてご紹介したいと思います。

制約をつけてテーブルを作成する

テーブルに制約を定義するときには、テーブルを定義するCREATE TABLE文の中に同時に記述して行うことができます。
ここでは、制約をつけてテーブルを定義する方法を紹介いたします。

制約を付加するには2種類の方法があります。列制約と表制約です。
列制約はCREATE TABLE文で列を定義するのと同時に制約を付加させるものです。列定義の後ろに半角スペースで区切って制約を記述します。
表制約は、「列名とデータ型のリスト」を記述した後に、さらに「,」で区切って制約を記述していきます。
制約には、列制約でのみ記述できるものと、列制約と表制約で記述できるものがあります。

表「制約を定義する際の注意」
seiyakuitiran
※ただし、MYSQLでは列制約で外部キーを付加することはできません。

NOT NULL制約は列制約のみ、複数の列に同時に制約を付加する複合主キー制約表制約のみで付加できるという特徴があります。

それぞれの制約についてその付加方法について紹介していきます。

主キーを付加する

主キーを付加するには、「PRIMARY KEY」という記述を使います。

例)列制約で主キーを付加するCREATE TABELE文

[sql] CREATE TABLE sample(
column1 INTEGER PRIMARY KEY,
column2 VARCHAR(30),
column3 TIMESTAMP,
column4 INTEGER
)[/sql]

column1に主キーを制約を付加しました。このように列名とデータ型の後に半角スペースで区切って制約を記述します。

続いて、表制約で主キーを付加します。

例)表制約で主キーを付加するCREATE TABELE文

[sql] CREATE TABLE sample(
column1 INTEGER,
column2 VARCHAR(30),
column3 TIMESTAMP,
column4 INTEGER,
PRIMARY KEY(column1)
)[/sql]

表制約では、「列名とデータ型のリスト」の後に、「,」で区切って制約名を記述します。
制約名を記述した後の()内には制約を付加させる列名を記述します。

主キー制約は複合キーも設定できました。複合主キーについては表制約で記述する必要があります。2つの複合主キーとする記述例を挙げます。

例)複合主キーを付加するCREATE TABELE文

[sql] CREATE TABLE sample(
column1 INTEGER,
column2 VARCHAR(30),
column3 TIMESTAMP,
column4 INTEGER,
PRIMARY KEY(column1,column2)
)[/sql]

このように、主キーを設定する列を()の中に「,」で区切って記述します。

NOT NULL制約

NOT NULL制約は列制約でのみ定義可能です。

例)NOT NULL制約を付加するCREATE TABELE文

[sql] CREATE TABLE sample(
column1 INTEGER NOT NULL,
column2 VARCHAR(30),
column3 TIMESTAMP,
column4 INTEGER
)[/sql]

ユニークキー制約

ユニークキー制約は列制約と表制約の両方で付加することができます。基本的には書式は主キー制約のときと同じですが、SQLでは「UNIQUE」と記述します。

例)ユニークキーを列制約で付加するCREATE TABELE文

[sql] CREATE TABLE sample(
column1 INTEGER UNIQUE,
column2 VARCHAR(30),
column3 TIMESTAMP,
column4 INTEGER
)[/sql]

例)ユニークキーを表制約で付加するCREATE TABELE文

[sql] CREATE TABLE sample(
column1 INTEGER,
column2 VARCHAR(30),
column3 TIMESTAMP,
column4 INTEGER,
UNIQUE(column1)
)[/sql]

外部キー制約

外部キー制約は、SQLでは「FOREIGN KEY (列名) PEREFERENCES テーブル名(列名)」と記述します。FOREIGN KEYの後の()内には外部キーを付加する列名、PEREFERENCESの後には親キーがあるテーブル名を記述し、()内には親キーの列名を記述します。

列制約で外部キーを付加するには次のようにします。sample2テーブルのcolumn2列は主キーに設定されているものとします。

例)列制約で外部キーを付加するCREATE TABELE文

[sql] CREATE TABLE sample(
column1 INTEGER PREFERNCES sample2(column1),
column2 VARCHAR(30),
column3 TIMESTAMP,
column4 INTEGER
)[/sql]

このように列制約では、FOREIGN KEYを省略して、PEREFRENCES・・・と記述します。
※ただし、MySQLでは列制約で外部キーを付加しても無視されます。

表制約では、次のように行います。

例)表制約で外部キーを付加するCREATE TABELE文

[sql] CREATE TABLE sample(
column1 INTEGER,
column2 VARCHAR(30),
column3 TIMESTAMP,
column4 INTEGER,
FOREIGN KEY(column1) PREFERENCES sample2(column2)
)[/sql]

さいごに

今回は、制約をつけてテーブルを作成する方法について紹介いたしました。
次回は、列にデフォルトの値を設定する方法と、自動インクリメントする列を定義する方法について紹介いたします。

法人向け人気レンタルサーバー
法人向け人気専用サーバー
個人向け人気レンタルサーバー