-
はじめに
ここでは,フィールドの属性(スキーマという)の設定方法や性質について述べます. -
概略
テーブル作成時にフィールドの属性(以下スキーマと表す)を設定することができます.表1にいくつかのスキーマを示します.
表1:スキーマ一覧 スキーマ 概要 not null 値を必ず入れさせるようにします. auto_increment レコードを追加するたびにカウントアップした数値を自動的に入力します.IDを入力する場合に便利です. default 値が入力されなかった場合,defaultで指定した値が代入されます. index MySQLでは,データの検索時に高速動作させるため,索引をつけることができるが,それを作成するのに用います.
欠点としては更新および追加時には速度低下を招く可能性があります.unique 唯一の値しか入力できなくします.言い換えれば,一度入力した値を再び入力するとエラーになります. primary key unique not nullと同じです.主キーに対して設定します. foreign key 外部キーに対して設定します.基本的には,外部キーの参照先を削除や変更を行うとエラーとなります. -
not null
create table テーブル名 (フィールド名 型 not null, ... ); -
auto_increment
create table テーブル名 (フィールド名 型 auto_increment, ... ); -
default
create table テーブル名 (フィールド名 型 default デフォルト値, ... ); -
index
create table テーブル名 (フィールド名 型 , ..., index(フィールド名, ...) ); -
unique
①create table テーブル名 (フィールド名 型 unique, ... );
or
②create table テーブル名 (フィールド名 型,... ,unique(フィールド名,...) );
② の書式を用いると,①の書式で行えること全てを実現できる.それに対して,②にしかできない制約がある.下に示した例では,aとbの組合せに対して uniqueとしている.つまり,a,bそれぞれについて着目してみると,同一の値を入れているにもかかわらずエラーとならない.しかしaとbの組合せで 同じ値が入力されるとエラーとなる.下図はその例である.
-
primary key
①create table テーブル名 (フィールド名 型 primary key, ... );
or
②create table テーブル名 (フィールド名 型,... ,primary key(フィールド名,...) );
primary keyにもuniqueと同様に2つの書式がある.②の書式では複数のフィールドが組み合わさって主キーとなる場合に用いることができる.下図にその例を示す.aおよびbそれぞれについて重複する値を入れてもエラーにはならないが,aとbの組合せが同じ場合にはエラーが発生している.
-
foreign key
create table テーブル名 (フィールド名 型, ..., foreign key (フィールド名) references 被参照テーブル名(被参照フィールド名)
on delete {cascade|set null} on update {cascade|set null}, ... );
こ の例では,id(主キー)とd1というフィールドを持つテーブルtest1と,fk(外部キー)とd2というフィールドを持つテーブルtest2を作成 し,それぞれデータを入力したとする.もしtest1のレコードが消されてしまうと,test2のfkに対応するものが無くなってしまう.結果として, joinしても下図のようになってしまう.
これに対してforeign keyを用いる場合を下図にて示す.
この後,test1のレコードを削除しようとすると,下図のようにエラーが発生する.これはtest1のidが被参照フィールドであるからである.このように,foreign keyを用いると不用意にデータを消去することを防ぐことができる.
し かし,場合によっては本当に被参照テーブルを削除・更新を行いたい場合もある.そのような場合の対処を指定するのが,”on”である.下記に使用例を示 す.この場合,被参照フィールドが削除された場合,該当する外部キーのレコードを削除し,被参照フィールドが更新された場合,該当する外部キーも自動的に 修正する.
実際に更新した例を下に示す.更新自体はtest1のidを1から5にしているが,注目すべきはtest2のfkについても変更がなされていることである.なお,”on”の後の句に”set null”と指定すると,当該フィールドがnullとなる.
フィールドの属性(スキーマ)について
- Details
- Written by: 芦田和毅