CREATE TABLE 構文で使用できる様々なオプションを説明します。
MySQL5.0.16対応
CREATE TABLE new_table ( i integer AUTO_INCREMENT );
オートインクリメントカラムを定義します。
CREATE TABLE new_table ( i integer NOT NULL );
カラムのNULL可否を設定します。
デフォルトはNULL(NULL可)です。
CREATE TABLE new_table ( i integer NOT NULL DEFAULT 10 );
カラムのデフォルト値を定義します。
CREATE TABLE new_table ( i integer COMMENT 'column_comment' );
カラムコメントを定義します。
CREATE TABLE new_table ( i integer, PRIMARY KEY (i) );
プライマリキーを定義します。
これはインデックスで、NOT NULLであり、UNIQUEであり
テーブル内で最大一つしか定義できません。
簡単に言えば「行(レコード)を識別する手掛り」となるのがこれです。
CREATE TABLE new_table ( i integer, INDEX INDEX_1 (i) );
インデックスを定義します。KEY はインデックスのシノニム(別名)です。
CREATE TABLE new_table ( i integer, j integer, UNIQUE UNIQUE_INDEX_1 (i), UNIQUE INDEX UNIQUE_INDEX_2 (j) );
ユニークインデックスを定義します。UNIQUE INDEX と表記しても同じです。
CREATE TABLE new_table ( i text, j text, FULLTEXT FULLTEXT_INDEX_1 (i), FULLTEXT INDEX FULLTEXT_INDEX_2 (j) );
全文検索(FULLTEXT)インデックスを定義します。
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テーブルである必要があります。
CREATE TEMPORARY TABLE tabel_name ...;
テンポラリテーブルを作成します。
テンポラリテーブルは現在の接続のみ有効で、接続が閉じられると自動的に削除されます。
別の接続で同名のテーブルを同時に生成することが可能です。
CREATE TABLE IF NOT EXISTS tabel_name ...;
既に同名のテーブルが存在するときに何も行いません(エラー回避目的)。
CREATE TABLE new_table LIKE original_table;
既存のテーブル定義と同じテーブルを作成します。
テーブル内容は空になります。
CREATE TABLE table_name ... TYPE = InnoDB;
テーブル型を指定します。
省略すると、storage_engine システム変数の値が適用されます。
ARCHIVEストレージエンジンを使ったテーブルです。
ページのロックを行うトランザクションセーフテーブルです。
これはBerkeleyDBとして知られています。
カンマ区切り(CSV形式)で内容を保持するテーブルです。
EXAMPLEストレージエンジンを使ったテーブルです。
リモートテーブルにアクセスするストレージエンジンです。
テーブルデータをメモリ内に保持するテーブルです。
サーバを再起動してもテーブルデータは保持されます。
インデックスもサポートされています。
行ロックを行うトランザクションセーフテーブルです。
複数の MyISAM テーブルを 1 つのテーブルとして利用するためのテーブルです。
トランザクション無の基本的なテーブル型です。
NDBストレージエンジンを使ったテーブルです。
CREATE TABLE table_name ... AUTO_INCREMENT = 500;
テーブルに設定する初期 AUTO_INCREMENT 値。デフォルトでは 1 です。
MySQL5.0.2以降、この値は auto_increment_increment システム変数により
デフォルト値を変更できます。
CREATE TABLE table_name ... AVG_ROW_LENGTH = 120;
テーブルのレコードの長さの平均の近似値。
これにより、テーブルのおおよその最大占有サイズが決定されます。
CREATE TABLE table_name [DEFAULT] CHARACTER SET 'utf8'; CREATE TABLE table_name [DEFAULT] CHARSET 'ujis';
テーブルのデフォルト文字コードを指定します。CHARSET はこのキーワードのシノニム(別名)です。
テーブルのデフォルトcollation(照合順序)を指定します。
CREATE TABLE table_name ... CHECKSUM = 1;
1 に設定すると、全ての行のチェックサムを有効にします。
これによって更新速度は遅くなりますが、破損したテーブルを見つけやすくなります。
CREATE TABLE table_name ... COMMENT = 'string';
テーブルコメントを 60 文字以内で記述します。
MySQL5.0.13から導入されました。
FEDERATED テーブルの接続文字列を指定します。
CREATE TABLE table_name ... MAX_ROWS = 10000;
テーブルに格納する予定の最大レコード数。
CREATE TABLE table_name ... MIN_ROWS = 100;
テーブルに格納する予定の最小レコード数。
CREATE TABLE table_name ... PACK_KEYS = 1;
インデックスの圧縮方法を指定します。
インデックスの圧縮は行いません。
全て(数値も含む)のインデックスを圧縮します。
カラム幅によってインデックスの圧縮を有効/無効にします(デフォルト)。
この場合、文字長の長いCHAR/VARCHAR型のみが圧縮されます。
CREATE TABLE table_name ... PASSWORD = 'string';
パスワードを指定して '.frm' ファイルを暗号化します。
このオプションは、標準のMySQLでは何も行いません。
CREATE TABLE table_name ... DELAY_KEY_WRITE = 1;
1 にすると、インデックスファイルの更新を毎回行わずに
テーブルを閉じるときに初めて更新します。
これによってキーの書き込みはかなり速くなりますが、(停電などの)不慮の事故により
正しくテーブルが閉じられなかったときにインデックスファイルが欠落する危険性があります。
そのため、MySQLでは
myisamchk --fast --force (テーブルファイル)
を実行して定期的にテーブルの破損をチェックする事を奨めています。
CREATE TABLE table_name ... ROW_FORMAT = DYNAMIC;
レコードの格納方法を定義します。
現在、MyISAMテーブルでのみ有効です。
テーブルカラムによって格納方法を決定します(デフォルト)。
強制的に動的テーブルを使用します。
強制的に静的(固定長)テーブルを使用します。
ただし、テーブル内に VARCHAR / BLOB / TEXT 型のカラムが含まれている場合には無視されます。
myisampack プログラムは、この値を COMPRESSED にセットします。
MySQL5では、RAIDはサポートされていません。
CREATE TABLE table_name ... TYPE=MERGE UNION = (t1, t2) INSERT_METHOD=LAST;
MERGE テーブルでのみ有効なオプションです。
マージする複数のテーブルを指定します。
CREATE TABLE table_name ... TYPE=MERGE UNION = (t1, t2) INSERT_METHOD=FIRST;
MERGE テーブルでのみ有効なオプションです。
レコードの挿入先テーブルを指定します。
CREATE TABLE table_name ... DATA DIRECTORY = '/var/db/data_directory';
データファイルの場所を絶対パスで指定します。
CREATE TABLE table_name ... INDEX DIRECTORY = '/var/db/index_directory';
インデックスファイルの場所を絶対パスで指定します。