minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

CREATE TABLE 構文で使用できる様々なオプションを説明します。
MySQL5.0.16対応

カラム定義

AUTO_INCREMENT

CREATE TABLE new_table (
  i integer AUTO_INCREMENT
);

オートインクリメントカラムを定義します。

NULL / NOT NULL

CREATE TABLE new_table (
  i integer NOT NULL
);

カラムのNULL可否を設定します。
デフォルトはNULL(NULL可)です。

DEFAULT

CREATE TABLE new_table (
  i integer NOT NULL DEFAULT 10
);

カラムのデフォルト値を定義します。

COMMENT

CREATE TABLE new_table (
  i integer COMMENT 'column_comment'
);

カラムコメントを定義します。

PRIMARY KEY

CREATE TABLE new_table (
  i integer,
  PRIMARY KEY (i)
);

プライマリキーを定義します。
これはインデックスで、NOT NULLであり、UNIQUEであり
テーブル内で最大一つしか定義できません。
簡単に言えば「行(レコード)を識別する手掛り」となるのがこれです。

INDEX

CREATE TABLE new_table (
  i integer,
  INDEX INDEX_1 (i)
);

インデックスを定義します。
KEY はインデックスのシノニム(別名)です。

UNIQUE

CREATE TABLE new_table (
  i integer,
  j integer,
  UNIQUE UNIQUE_INDEX_1 (i),
  UNIQUE INDEX UNIQUE_INDEX_2 (j)
);

ユニークインデックスを定義します。
UNIQUE INDEX と表記しても同じです。

FULLTEXT

CREATE TABLE new_table (
  i text,
  j text,
  FULLTEXT FULLTEXT_INDEX_1 (i),
  FULLTEXT INDEX FULLTEXT_INDEX_2 (j)
);

全文検索(FULLTEXT)インデックスを定義します。

FOREIGN KEY

CREATE TABLE parent (
  id INT
) ENGINE=INNODB;
CREATE TABLE child (
  parent_id INT,
  FOREIGN KEY (parent_id) REFERENCES parent(id)
  ON DELETE CASCADE
) ENGINE=INNODB;

外部キーを定義します。参照元、参照先共にInnoDBテーブルである必要があります。

オプション

TEMPORARY

CREATE TEMPORARY TABLE tabel_name ...;

テンポラリテーブルを作成します。
テンポラリテーブルは現在の接続のみ有効で、接続が閉じられると自動的に削除されます。
別の接続で同名のテーブルを同時に生成することが可能です。

IF NOT EXISTS

CREATE TABLE IF NOT EXISTS tabel_name ...;

既に同名のテーブルが存在するときに何も行いません(エラー回避目的)。

LIKE

CREATE TABLE new_table LIKE original_table;

既存のテーブル定義と同じテーブルを作成します。
テーブル内容は空になります。

TYPE

CREATE TABLE table_name ... TYPE = InnoDB;

テーブル型を指定します。
省略すると、storage_engine システム変数の値が適用されます。

ARCHIVE

ARCHIVEストレージエンジンを使ったテーブルです。

BDB

ページのロックを行うトランザクションセーフテーブルです。
これはBerkeleyDBとして知られています。

CSV

カンマ区切り(CSV形式)で内容を保持するテーブルです。

EXAMPLE

EXAMPLEストレージエンジンを使ったテーブルです。

FEDERATED

リモートテーブルにアクセスするストレージエンジンです。

MEMORY

テーブルデータをメモリ内に保持するテーブルです。
サーバを再起動してもテーブルデータは保持されます。
インデックスもサポートされています。

InnoDB

行ロックを行うトランザクションセーフテーブルです。

MERGE

複数の MyISAM テーブルを 1 つのテーブルとして利用するためのテーブルです。

MyISAM

トランザクション無の基本的なテーブル型です。

NDBCLUSTER

NDBストレージエンジンを使ったテーブルです。

AUTO_INCREMENT

CREATE TABLE table_name ... AUTO_INCREMENT = 500;

テーブルに設定する初期 AUTO_INCREMENT 値。デフォルトでは 1 です。
MySQL5.0.2以降、この値は auto_increment_increment システム変数により
デフォルト値を変更できます。

AVG_ROW_LENGTH

CREATE TABLE table_name ... AVG_ROW_LENGTH = 120;

テーブルのレコードの長さの平均の近似値。
これにより、テーブルのおおよその最大占有サイズが決定されます。

CHARACTER SET

CREATE TABLE table_name [DEFAULT] CHARACTER SET 'utf8';
CREATE TABLE table_name [DEFAULT] CHARSET 'ujis';

テーブルのデフォルト文字コードを指定します。
CHARSET はこのキーワードのシノニム(別名)です。

COLLATE

テーブルのデフォルトcollation(照合順序)を指定します。

CHECKSUM

CREATE TABLE table_name ... CHECKSUM = 1;

1 に設定すると、全ての行のチェックサムを有効にします。
これによって更新速度は遅くなりますが、破損したテーブルを見つけやすくなります。

COMMENT

CREATE TABLE table_name ... COMMENT = 'string';

テーブルコメントを 60 文字以内で記述します。

CONNECTION

MySQL5.0.13から導入されました。
FEDERATED テーブルの接続文字列を指定します。

MAX_ROWS

CREATE TABLE table_name ... MAX_ROWS = 10000;

テーブルに格納する予定の最大レコード数。

MIN_ROWS

CREATE TABLE table_name ... MIN_ROWS = 100;

テーブルに格納する予定の最小レコード数。

PACK_KEYS

CREATE TABLE table_name ... PACK_KEYS = 1;

インデックスの圧縮方法を指定します。

0

インデックスの圧縮は行いません。

1

全て(数値も含む)のインデックスを圧縮します。

DEFAULT

カラム幅によってインデックスの圧縮を有効/無効にします(デフォルト)。
この場合、文字長の長いCHAR/VARCHAR型のみが圧縮されます。

PASSWORD

CREATE TABLE table_name ... PASSWORD = 'string';

パスワードを指定して '.frm' ファイルを暗号化します。
このオプションは、標準のMySQLでは何も行いません。

DELAY_KEY_WRITE

CREATE TABLE table_name ... DELAY_KEY_WRITE = 1;

1 にすると、インデックスファイルの更新を毎回行わずに
テーブルを閉じるときに初めて更新します。

これによってキーの書き込みはかなり速くなりますが、(停電などの)不慮の事故により
正しくテーブルが閉じられなかったときにインデックスファイルが欠落する危険性があります。
そのため、MySQLでは

myisamchk --fast --force (テーブルファイル)

を実行して定期的にテーブルの破損をチェックする事を奨めています。

ROW_FORMAT

CREATE TABLE table_name ... ROW_FORMAT = DYNAMIC;

レコードの格納方法を定義します。
現在、MyISAMテーブルでのみ有効です。

DEFAULT

テーブルカラムによって格納方法を決定します(デフォルト)。

DYNAMIC

強制的に動的テーブルを使用します。

FIXED

強制的に静的(固定長)テーブルを使用します。
ただし、テーブル内に VARCHAR / BLOB / TEXT 型のカラムが含まれている場合には無視されます。

myisampack プログラムは、この値を COMPRESSED にセットします。

RAID_TYPE

MySQL5では、RAIDはサポートされていません。

UNION

CREATE TABLE table_name ... TYPE=MERGE UNION = (t1, t2) INSERT_METHOD=LAST;

MERGE テーブルでのみ有効なオプションです。
マージする複数のテーブルを指定します。

INSERT_METHOD

CREATE TABLE table_name ... TYPE=MERGE UNION = (t1, t2) INSERT_METHOD=FIRST;

MERGE テーブルでのみ有効なオプションです。
レコードの挿入先テーブルを指定します。

DATA DIRECTORY

CREATE TABLE table_name ... DATA DIRECTORY = '/var/db/data_directory';

データファイルの場所を絶対パスで指定します。

INDEX DIRECTORY

CREATE TABLE table_name ... INDEX DIRECTORY = '/var/db/index_directory';

インデックスファイルの場所を絶対パスで指定します。