MySQLのテーブルのカラムに設定できるオプション

MySQL Workbenchでテーブルのカラムを設定する際に付けられるオプションについて勉強したのでメモとして残しておく。

カラムに設定できるオプション

PK(Primary Key)

対象フィールドをプライマリキーに指定する。同じフィールド内では値が一意であることが保証される。※IndexesのType PRIMARYと同じ。

NN(Not Null)

対象フィールドに対してNullを入れることを許可しない。

Index ※タブのIndexesからType INDEXを選択

対象フィールドに対してレコード挿入の際に索引を付ける。対象のフィールドをクエリで検索するキーに指定した場合は処理が高速化される。デメリットとしては索引を付ける分データ量が増える。

UQ(Unique Index)

対象フィールドに対してレコード挿入の際に索引を付ける。また、同時に同じフィールド内では値が一意であることを保証する(NULLは除く)。デメリットとしては索引を付ける分データ量が増える。※IndexesのType UNIQUEと同じ。

BIN(Is Binary Column)

対象フィールドに保存されたデータを型情報は保持したままに、Binaryデータとして見ることが出来る。Binary型とは区別されるので、Binary型に変換されて保存される訳ではない。使い所としては、MySQLではCHAR、VARCHARでの文字列のソート・比較の時に大文字小文字を区別しないので、区別させたい場合はこのオプション(属性)を付けることで行うことができる。

UN(Unsigned Data Type)

対象のフィールドのデータ型をUnsigned(補数表現を使用しない)にする。INT型の場合、-2147483648 ~ 2147483647という範囲の数値が表現できるが、Unsigned Int型だと0 ~ 4294967295という範囲の数値を表現できる。

ZF(Zero Fill)

対象フィールドが整数型の場合、使われていない桁を0で埋める。例として、INT型なら最大10桁の0が、BIGINT型なら最大19桁の0が並ぶ。

AI(Auto Incremental)

対象フィールドが整数型の場合、レコードが挿入される度に+1ずつ値が加算される。AIを付けることで値が重複しないフィールドとなるので、PK(Primary Key)やIndexやUQ(Unique Index)と併用することが多い。

Default

対象フィールドにデフォルト値を設定することが出来る。NN(Not Null)と併用することが多い。NN(Not Null)が指定されており、且つ、Defaultが指定されていない場合は型ごとの最適値がフィールドに挿入される。ここでの最適値とは0や空白文字となる。

FULLTEXT ※IndexesからType FULLTEXTを選択

対象フィールドに対して、MATCH …… AGAINST 構文を用いたSELECT句で検索する事により、マッチ率の高い順 (近似値順) にソートされたレコードセットを取得することができる。MySQL独自の全文検索インデックス機能である。MySQL単体で完結する全文検索の仕組みが提供される。

SPATIAL ※IndexesからType SPATIALを選択

対象フィールドを空間インデックスに対応させることができる。地図検索などの用途に用いられる専門性の高い項目なのでここでは踏み込まない。

Foreign Keys ※タブのForeign Keysを選択

外部キーのこと。対象カラムに対して挿入できる値に制約を付けることができる。Columnで選択されたカラムにはReferenced Columnに指定されたカラムに含まれる値しか挿入することができなくなる。

参考
MySQL::MySQL 4.1 リファレンスマニュアル::1.8.5.2 NOT NULL および DEFAULT 値制約
MySQLで全文検索 – FULLTEXTインデックスの基礎知識|blog|たたみラボ
MySQL::MySQL 4.1 リファレンスマニュアル::10.6.1 空間インデックスの作成
空間インデックス – Wikipedia