CREATE [TEMPORARY] TABLE [IF NOT EXISTS]tbl_name(create_definition,...) [table_option...] [partition_options]
または:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS]tbl_name[(create_definition,...)] [table_option...] [partition_options]select_statement
または:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS]tbl_name{ LIKEold_tbl_name| (LIKEold_tbl_name) }create_definition:column_definition| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) [index_option...] | {INDEX|KEY} [index_name] [index_type] (index_col_name,...) [index_option...] | [CONSTRAINT [symbol]] UNIQUE [INDEX|KEY] [index_name] [index_type] (index_col_name,...) [index_option...] | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_name,...) [index_option...] | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition] | CHECK (expr)column_definition:col_namedata_type[NOT NULL | NULL] [DEFAULTdefault_value] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] [reference_definition]data_type: BIT[(length)] | TINYINT[(length)] [UNSIGNED] [ZEROFILL] | SMALLINT[(length)] [UNSIGNED] [ZEROFILL] | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] | INT[(length)] [UNSIGNED] [ZEROFILL] | INTEGER[(length)] [UNSIGNED] [ZEROFILL] | BIGINT[(length)] [UNSIGNED] [ZEROFILL] | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] | DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL] | NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL] | DATE | TIME | TIMESTAMP | DATETIME | YEAR | CHAR(length) [CHARACTER SETcharset_name] [COLLATEcollation_name] | VARCHAR(length) [CHARACTER SETcharset_name] [COLLATEcollation_name] | BINARY(length) | VARBINARY(length) | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB | TINYTEXT [BINARY] [CHARACTER SETcharset_name] [COLLATEcollation_name] | TEXT [BINARY] [CHARACTER SETcharset_name] [COLLATEcollation_name] | MEDIUMTEXT [BINARY] [CHARACTER SETcharset_name] [COLLATEcollation_name] | LONGTEXT [BINARY] [CHARACTER SETcharset_name] [COLLATEcollation_name] | ENUM(value1,value2,value3,...) [CHARACTER SETcharset_name] [COLLATEcollation_name] | SET(value1,value2,value3,...) [CHARACTER SETcharset_name] [COLLATEcollation_name] |spatial_typeindex_col_name:col_name[(length)] [ASC | DESC]index_type: USING {BTREE | HASH}index_option: KEY_BLOCK_SIZEvalue|index_type| WITH PARSERparser_namereference_definition: REFERENCEStbl_name[(index_col_name,...)] [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE] [ON DELETEreference_option] [ON UPDATEreference_option]reference_option: RESTRICT | CASCADE | SET NULL | NO ACTIONtable_option: [TABLESPACEtablespace_nameSTORAGE DISK] ENGINE [=]engine_name| AUTO_INCREMENT [=]value| AVG_ROW_LENGTH [=]value| [DEFAULT] CHARACTER SETcharset_name| CHECKSUM [=] {0 | 1} | COLLATEcollation_name| COMMENT [=] 'string' | CONNECTION [=] 'connect_string' | DATA DIRECTORY [=] 'absolute path to directory' | DELAY_KEY_WRITE [=] {0 | 1} | INDEX DIRECTORY [=] 'absolute path to directory' | INSERT_METHOD [=] { NO | FIRST | LAST } | KEY_BLOCK_SIZE [=]value| MAX_ROWS [=]value| MIN_ROWS [=]value| PACK_KEYS [=] {0 | 1 | DEFAULT} | PASSWORD [=] 'string' | ROW_FORMAT [=] {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT} | UNION [=] (tbl_name[,tbl_name]...)partition_options: PARTITION BY [LINEAR] HASH(expr) | [LINEAR] KEY(column_list) | RANGE(expr) | LIST(expr) [PARTITIONSnum] [SUBPARTITION BY [LINEAR] HASH(expr) | [LINEAR] KEY(column_list) [SUBPARTITIONSnum] ] [(partition_definition[,partition_definition] ...)]partition_definition: PARTITIONpartition_name[VALUES {LESS THAN (expr) |MAXVALUE| IN (value_list)}] [[STORAGE] ENGINE [=]engine_name] [COMMENT [=]'comment_text'] [DATA DIRECTORY [=] ''] [INDEX DIRECTORY [=] 'data_dir'] [MAX_ROWS [=]index_dirmax_number_of_rows] [MIN_ROWS [=]min_number_of_rows] [TABLESPACE [=] (tablespace_name)] [NODEGROUP [=]node_group_id] [(subpartition_definition[,subpartition_definition] ...)]subpartition_definition: SUBPARTITIONlogical_name[[STORAGE] ENGINE [=]engine_name] [COMMENT [=]'comment_text'] [DATA DIRECTORY [=] ''] [INDEX DIRECTORY [=] 'data_dir'] [MAX_ROWS [=]index_dirmax_number_of_rows] [MIN_ROWS [=]min_number_of_rows] [TABLESPACE [=] (tablespace_name)] [NODEGROUP [=]node_group_id]select_statement:[IGNORE | REPLACE] [AS] SELECT ... (Some legal select statement)
        CREATE TABLE
        は、与えられた名前でデータ
        ベースを作成します。テーブルに対して
        CREATE
        権限を持つ必要があります。
      
項8.2. 「識別子」 に許容テーブル名のルールが紹介されています。デフォルトによって、デフォルト データベースの中にテーブルが作成されます。テーブルが既に存在したり、デフォルト データベースが無かったり、データベースが存在しなかったりするとエラーが発生します。
        指定データベース内にテーブルを作成するには、テーブル名を
        db_name.tbl_name
        と指定する事ができます。この作業は、デフォルト
        データベースが無くても、あると仮定して行われます。もし引用識別子を利用するなら、データベースとテーブル名は別々に引用してください。例えば、`mydb.mytbl`
        ではなく `mydb`.`mytbl`
        と書いてください。
      
        テーブルを作成する時、TEMPORARY
        キーワードを利用する事ができます。TEMPORARY
        テーブルは現在の接続でのみ現れ、接続が終了すると自動的にドロップされます。これは、2つの異なる接続同士、または、既存の同名の非TEMPORARY
        テーブルとお互いに対立する事無く、同じテンポラリ
        テーブル名を利用する事ができるという意味になります。(テンポラリ
        テーブルがドロップされるまで、既存テーブルは隠されています。)テンポラリ
        テーブルを作成する為には CREATE TEMPORARY
        TABLES 特権を持つ必要があります。
      
        注意:CREATE
        TABLE は、もし TEMPORARY
        キーワードを利用すると自動的に現在のアクティブなトランザクションを行いません。
      
        もしテーブルが存在すると IF NOT
        EXISTS
        キーワードはエラーが起こるのを防ぎます。しかし、CREATE
        TABLE
        ステートメントに指示されたテーブルと既存テーブルが同一の構造である事の照合は行われません。注意:もし
        IF NOT EXISTS を CREATE TABLE ...
        SELECT
        ステートメント内で利用すると、SELECT
        部分によって選択された全ての行はテーブルが既に存在するかどうかに関わらず挿入されます。
      
        MySQL はそれぞれのテーブルをデータベース
        ディレクトリ内に .frm テーブル
        フォーマットで表します。テーブルのストレージ
        エンジンは別のファイルを作成する事もあります。MyISAM
        テーブルの場合、ストレージ
        エンジンはデータとインデックス
        ファイルを作成します。従って、各
        MyISAM テーブル
        tbl_name は3つのディスク
        ファイルを持ちます。
      
| ファイル | 目的 | 
|  | テーブル フォーマット (定義) ファイル | 
|  | データ ファイル | 
|  | インデックス ファイル | 
章 13. ストレージエンジンとテーブルタイプ でテーブルを表す為にそれぞれのストレージ エンジンがどのファイルを作成するのか説明されています。もしテーブル名が特別な文字を含んでいる場合、そのテーブル ファイルの名前は項8.2.3. 「ファイル名への識別子のマッピング」に表されているようにそれらの文字が暗号化された形を含んだ物になります。
        data_type は、データ
        タイプはカラム定義だという事を意味します。
        spatial_type は空間データ
        タイプを意味します。表示されるデータ
        タイプ構文はただの見本です。各タイプの性質についての情報だけでなく、カラム
        データ
        タイプを指定する事ができる構文の完全な説明については、章 10. データタイプ
        と 章 16. Spatial Extensions
        を参照してください。
      
        いくつかの属性は全てのデータ
        タイプには対応しません。AUTO_INCREMENT
        は整数タイプにのみ対応します。DEFAULT
        は BLOB や TEXT
        タイプには対応しません。
      
            もし NULL か NOT
            NULL
            のどちらも指定されなければ、そのカラムは
            NULL
            が指定されたという形で扱われます。
          
            整数カラムは追加属性
            AUTO_INCREMENT
            を持つ事ができます。インデックスされた
            AUTO_INCREMENT カラムに
            NULL (推奨) か 0
            の値を挿入すると、カラムは次のシーケンス値に設定されます。通常これは
            、value
            が現在テーブルの中にあるカラムの最大値である、value+1AUTO_INCREMENT
            シーケンスは 1
            で始まります。
          
            行の挿入後に AUTO_INCREMENT
            値を検索するには、
            LAST_INSERT_ID() SQL 機能か
            mysql_insert_id() C API
            関数を利用してください。項11.10.3. 「情報関数」、項23.2.3.37. 「mysql_insert_id()」
            を参照して下さい。
          
            もし NO_AUTO_VALUE_ON_ZERO SQL
            モードが有効であれば、新しいシーケンス値を発生させずに
            0 を AUTO_INCREMENT
            カラムに 0
            として格納する事ができます。詳しくは
            項4.2.6. 「SQL モード」
            を参照してください。
          
            注意:各テーブルに
            AUTO_INCREMENT
            カラムは1つだけ存在する事ができ、それはインデックスされる必要があり、DEFAULT
            値を持つ事はできません。AUTO_INCREMENT
            カラムは正数のみを含んでいる時だけ正しく機能します。負数を挿入すると、とても大きな正数を挿入したと解釈されます。これは、数字が正数から負数に
            「ラップ」
            される時の精度の問題を避ける為に、また
            0 を含む
            AUTO_INCREMENT
            カラムを誤って採用してしまわない為に行われます。
          
            MyISAM
            テーブルには、複合カラム キー内の
            AUTO_INCREMENT セカンダリ
            カラムを指定する事ができます。詳しくは
            Using AUTO_INCREMENT
            を参照してください。
          
            MySQL 互換性がいくつかの ODBC
            アプリケーション持つ為に、次のクエリを利用して、最後に挿入された行に
            AUTO_INCREMENT
            値を見つける事ができます。
          
SELECT * FROMtbl_nameWHEREauto_colIS NULL
            InnoDB と
            AUTO_INCREMENT
            の更なる情報に関しては、項13.5.6.3. 「AUTO_INCREMENT カラムが InnoDB
        内でどのように機能するか」
            を参照してください。
          
            SERIAL 属性は BIGINT UNSIGNED
            NOT NULL AUTO_INCREMENT UNIQUE
            のエイリアスです。
          
            文字データタイプ(CHAR、VARCHAR、TEXT)は、文字セットとカラムの照合を指定する為にCHARACTER
            SET と COLLATE
            属性を含む事ができます。詳細に関しては
            章 9. キャラクタセットサポート
            を参照して下さい。CHARSET は
            CHARACTER SET の同義語です。例:
          
CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
            MySQL 5.1
            は、文字の中の文字カラム定義の長さ仕様を解明します。(MySQL
            4.1
            以前のバージョンでは、それらはバイトで解釈されます。)BINARY
            と VARBINARY
            の長さはバイトで表されています。
          
            
            
            DEFAULT
            条項はカラムのデフォルト値を指定します。例外がひとつあります。デフォルト値は一定でなければいけませんので、それは関数や式にはなり得ません。これは例えば、日付カラムの値に
            NOW() や CURRENT_DATE
            のような関数の値をデフォルトとして設定する事はできないという意味です。例外として、TIMESTAMP
            カラムのデフォルトとして
            CURRENT_TIMESTAMP
            を指定する事ができます。詳しくは
            項10.3.1.1. 「TIMESTAMP MySQL 4.1での性質」
            を参照してください。
          
            もしカラム定義が明示的な
            DEFAULT 値を含まない場合、MySQL
            はデフォルト値を
            項10.1.4. 「データタイプデフォルト値」
            のように規定します。
          
            BLOB と TEXT
            カラムはデフォルト値として割り当てる事ができません。
          
            
            カラムのコメントは、255文字の長さまでで
            COMMENT
            オプションで指定できます。コメントは
            SHOW CREATE TABLE と SHOW FULL
            COLUMNS
            ステートメントによって表示されます。
          
            KEY は通常 INDEX
            の同義語です。キー属性 PRIMARY
            KEY はまた、カラム定義の中では単に
            KEY
            として指定できます。これは、互換性の為に他のデータベースと共に利用されます。
          
            UNIQUE
            インデックスは、インデックス内の全ての値は明確でなければいけないというような制限を作成します。既存行とマッチするキー値の新しい行を追加しようとするとエラーが発生します。全てのエンジンに対して、UNIQUE
            インデックスは NULL
            を含む事ができるカラムの複数
            NULL 値を許容します。
          
            
            PRIMARY KEY は、全てのキー
            カラムが NOT NULL
            として定義されなければいけないユニーク
            インデックスです。もしそれらが NOT
            NULL
            として明示的に宣言されなければ、MySQL
            はそれらを暗示的に(そして静かに)宣言します。1つのテーブルは1つの
            PRIMARY KEY
            しか持つ事ができません。もし PRIMARY
            KEY
            が無いのにアプリケーションがテーブル内で
            PRIMARY KEY を要求したら、MySQL
            は PRIMARY KEY として
            NULL カラムを持たない最初の
            UNIQUE
            インデックスを返します。
          
            InnoDB テーブル内で長い
            PRIMARY KEY
            を持つとスペースを無駄に利用します。(詳しくは
            項13.5.13. 「InnoDB テーブルとインデックス構造」
            を参照してください。)
          
            作成されたテーブル内では、PRIMARY
            KEY が最初に置かれ、次に
            UNIQUE
            インデックスが続き、そして次に非ユニーク
            インデックスが続きます。このおかげで MySQL
            オプチマイザがどのインデックスを優先して利用するのか、また複製
            UNIQUE
            キーをより早く検索する為に役立ちます。
          
            PRIMARY KEY は複合カラム
            インデックスになり得ます。しかし、カラム仕様内で
            PRIMARY KEY
            キー属性を利用して複合カラム
            インデックスを作成する事はできません。それをしても、単一カラムが最初に来るという印が付けられるだけです。別々の
            PRIMARY
            KEY(
            条項を利用しなければいけません。
          index_col_name,
            ...)
            
            もし PRIMARY KEY か
            UNIQUE
            インデックスが整数タイプを持つ1つだけののカラムで構成されていたら、そのカラムを
            SELECT ステートメントの中で
            _rowid
            として参照する事もできます。
          
            MySQL 内では、PRIMARY KEY
            の名前は PRIMARY
            です。他のインデックスに関しては、もし名前を割り当てなければ、それを固有の物にする為に任意のサフィックス(_2、_3、...)を利用して、最初にインデックスされたカラムと同じ名前に指定されます。SHOW
            INDEX FROM 
            を利用してテーブルのインデックス名を調べる事ができます。詳しくは
            項12.5.4.17. 「tbl_nameSHOW INDEX 構文」 を参照してください。
          
            いくつかのストレージ
            エンジンでは、インデックスを作成する時にタイプを指定する事ができます。index_type
            指定子の構文は USING
             です。
          type_name
例:
CREATE TABLE lookup (id INT, INDEX USING BTREE (id)) ENGINE = MEMORY;
            MySQL 5.1.10 以前では、USING
            はインデックス カラム
            リストの前だけに与える事ができました。5.1.10
            以降のバージョンでの望ましい位置は、カラム
            リストの後ろです。MySQL 5.3 以降は、カラム
            リストの前でのオプションの使用は見られません。
          
            index_option
            値はインデックスの追加オプションを指定します。USING
            はそのようなオプションの1つです。許容
            index_option
            値の詳細に関しては 項12.1.7. 「CREATE INDEX 構文」
            を参照してください。
          
インデックスに関する更なる情報については、項6.4.5. 「MySQLにおけるインデックスの使用」 を参照してください。
            
            
            MySQL 5.1
            では、MyISAM、InnoDB、そして
            MEMORY ストレージ
            エンジンだけが NULL
            値を持つ事ができるカラムをインデックス上でサポートしています。それ以外の場合、インデックスされたカラムを
            NOT NULL
            として宣言しなければエラーが発生します。
          
            CHAR、VARCHAR、BINARY、そして
            VARBINARY
            カラムには、インデックス
            プリフィックス長を指定する為に
            col_name(length)BLOB
            と TEXT
            カラムもまたインデックスする事ができますが、プリフィックス長を与える
            必要があります。。プリフィックス長は非バイナリ文字列タイプには文字で指定され、バイナリ文字列タイプにはバイトで指定されます。これは、インデックス
            エントリはCHAR、VARCHAR、そして
            TEXT
            カラムのそれぞれのカラム値の最初の
            length 文字で、そして
            BINARY、
            VARBINARY、そして
            BLOB
            カラムのそれぞれのカラム値の最初の
            length
            バイトで成り立っているという事です。このようにカラム値のプリフィックスだけをインデックスする事で、インデックス
            ファイルをとても小さくする事ができます。詳しくは
            項6.4.3. 「カラムインデックス」 を参照してください。
          
            MyISAM と InnoDB
            ストレージ エンジンだけが
            BLOB と TEXT
            カラムのインデックスをサポートします。例:
          
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
            プリフィックスは最高で1000バイトの長さまで可能です。(InnoDB
            テーブルは767バイト)非バイナリ データ
            タイプ
            (CHAR、VARCHAR、TEXT)では
            CREATE TABLE
            ステートメントのプリフィックス長は文字数で解釈される一方、プリフィックス
            リミットはバイトで計算されるという事を覚えておいて下さい。マルチバイトの文字セットを利用するカラムのプリフィックス長を指定する時にはこれを考慮に入れておいて下さい。
          
            index_col_name 仕様は
            ASC か DESC
            で終わる事ができます。これらのキーワードは昇順や降順インデックス値ストレージを指定する為の将来の拡張子として許容されます。現在は、それらは解析されますが無視されます。インデックス値は毎回昇順で格納されます。
          
            SELECT内のTEXT か
            BLOB カラムに対して ORDER
            BY か GROUP BY
            を利用する時、サーバは
            max_sort_length
            システム変数によって指示された初期バイト数だけを利用して値をソートします。詳しくは
            項10.4.3. 「BLOBとTEXT タイプ」 を参照してください。
          
            フル テキスト検索に利用される特別な
            FULLTEXT
            インデックスを作成する事ができます。MyISAM
            ストレージ エンジンだけが
            FULLTEXT
            インデックスをサポートします。それらは
            CHAR、
            VARCHAR、そして
            TEXT
            カラムからのみ作成する事ができます。インデックスする作業は必ずカラム全体に対して行われますので、部分的インデックスはサポートされておらず、プリフィックス長を指定しても無視されます。操作に関しての詳細は
            項11.7. 「全文検索関数」
            を参照してください。WITH PARSER
            条項は、もしフル テキスト
            インデックスと検索操作が特別対応を必要とするなら、インデックスと共にパーサー
            プラグインと提携する為に
            index_option
            値として指定する事ができます。この条項は
            FULLTEXT
            インデックスだけに対して正当です。プラグインの作成に関しての詳細は項25.2. 「The MySQL Plugin Interface」
            を参照してください。
          
            空間データ タイプ上に SPATIAL
            インデックスを作成する事ができます。空間タイプは
            MyISAM
            テーブルに対してだけサポートされており、インデックスされたカラムは
            NOT NULL
            として宣言されなければいけません。詳しくは
            章 16. Spatial Extensions
            を参照してください。
          
            InnoDB
            テーブルは外部キー制約のチェックをサポートします。詳しくは
            項13.5. 「InnoDB ストレージ エンジン」
            を参照してください。InnoDB
            内の FOREIGN KEY
            構文は、このセクションの最初でCREATE
            TABLE
            ステートメントの為に紹介された構文よりも制限的である事を覚えておいてください。参照テーブルのカラムは必ず明確に名前を付けられる必要があります。InnoDB
            は、外部キーへの ON DELETE と
            ON UPDATE
            作用の両方をサポートします。正確な構文に関しては、項13.5.6.4. 「FOREIGN KEY 制約」
            を参照してください。
          
            その他のストレージ
            エンジンに関しては、MySQL サーバは
            CREATE TABLE ステートメント内の
            FOREIGN KEY と
            REFERENCES
            構文を検索し無視します。CHECK
            条項は、全てのストレージ
            エンジンに解析されますが、無視されます。詳しくは
            項1.8.5.5. 「外部キー」
            を参照してください。
          
            MyISAM テーブルに対しては、各
            NULL
            カラムは1ビット余分に利用し、一番近いバイト数に丸められます。バイトでの最大行長は次のように計算されます。
          
row length = 1
             + (sum of column lengths)
             + (number of NULL columns + delete_flag + 7)/8
             + (number of variable-length columns)
            delete_flag
            は静的行フォーマットのテーブルに対しては1です。静的テーブルは、行が削除されたかどうか指示するフラッグに対して行レコード内でビットを利用します。
            delete_flag
            は、フラッグがダイナミック行ヘッダー内で格納される為、ダイナミック
            テーブルに対しては0です。
          
            これらの計算は、NULL カラムと
            NOT NULL
            カラムの格納サイズが同じである
            InnoDB
            テーブルには適応しません。
          
        TABLESPACE ... STORAGE DISK
        テーブルオプションは NDB Cluster
        テーブルとのみ使用されます。これはテーブルをクラスタ
        ディスク データ
        テーブルスペースに割り当てます。tablespace_name
        と名づけられたテーブルスペースは CREATE
        TABLESPACE
        を利用してあらかじめ作成されている必要があります。このテーブルオプションは
        MySQL 5.1.6
        で紹介されています。詳しくは項14.11. 「MySQL Cluster ディスク データ ストレージ」
        を参照してください。
      
        ENGINE テーブル
        オプションはテーブルにストレージ
        エンジンを指定します。
      
        ENGINE テーブル
        オプションは、次のテーブルに表されているストレージ
        エンジン名を利用します。
      
| ストレージ エンジン | 説明 | 
| ARCHIVE | アーカイブ ストレージ エンジン詳しくは
                項13.10. 「 ARCHIVEストレージエンジン」
                を参照してください。 | 
| CSV | カンマで区切られた値のフォーマットで行を格納するテーブル詳しくは
                項13.11. 「 CSVストレージエンジン」
                を参照してください。 | 
| EXAMPLE | 例エンジン詳しくは 項13.8. 「 EXAMPLEストレージエンジン」
                を参照してください。 | 
| FEDERATED | リモート テーブルにアクセスするストレージ
                エンジン詳しくは
                項13.9. 「 FEDERATEDストレージエンジン」
                を参照してください。 | 
| HEAP | これは MEMORYの同義語です。 | 
| ISAM(OBSOLETE) | MySQL 5.1
                では無効です。もし古いバージョンから
                MySQL 5.1
                にアップグレードするなら、その作業の
                前に 全ての既存 ISAMテーブルをMyISAMに変換しなければいけません。 | 
| InnoDB | 行ロックと外部キーを持つトランザクション セーフ
                テーブル詳しくは 項13.5. 「 InnoDBストレージ エンジン」
                を参照してください。 | 
| MEMORY | このストレージ
                エンジンのデータはメモリの中だけに格納されます。詳しくは
                項13.7. 「 MEMORY(HEAP)
    ストレージエンジン」
                を参照してください。 | 
| MERGE | 1つのテーブルとして利用される MyISAMテーブルの集まり。また、MRG_MyISAMとしても知られています。詳しくは
                項13.6. 「MERGEストレージエンジン」
                を参照してください。 | 
| MyISAM | MySQL に利用されるデフォルト ストレージ
                エンジンであるバイナリ ポータブル
                ストレージ エンジン。詳しくは
                項13.4. 「 MyISAMストレージエンジン」
                を参照してください。 | 
| NDBCLUSTER | クラスタ化された、耐障害性の、メモリ
                ベースのテーブル。また、 NDBとしても知られています。詳しくは
                章 14. MySQL Cluster
                を参照してください。 | 
        もし適応しないストレージ
        エンジンが指定されると、MySQL
        は代わりにデフォルト
        エンジンを利用します。通常は
        MyISAM
        です。例えば、テーブル定義が
        ENGINE=INNODB
        オプションを含み、MySQL サーバが
        INNODB
        テーブルをサポートしなければ、そのテーブルは
        MyISAM
        テーブルとして作成されます。これは、トランザクショナル
        テーブルをマスタ上に持つが、スレーブ上に作成されたテーブルが非トランザクショナルである場合(スピードを速める為)の複製設定を可能にします。
        MySQL 5.1 では、ストレージ
        エンジン仕様が支持されていなければ警告が表示されます。
      
        注意:古い
        TYPE オプションは
        ENGINE と同義語です。MySQL 4.0
        以降、TYPE
        は廃止されましたが、MySQL 5.1 (MySQL 5.1.7
        となる予定)ではまだ後方互換性の為にサポートされています。MySQL
        5.1.8
        より、警告が表示されるようになりました。これはMySQL
        5.2
        では廃止される予定です。新しいアプリケーションの中では
        TYPE
        は利用するべきではありません、また、代わりに
        ENGINE
        を利用する為に、既存アプリケーションの変換を今すぐ始めるべきです。.(詳しくは
        項C.1.9. 「Changes in release 5.1.8 (Not released)」 を参照してください。)
      
        その他のテーブル
        オプションはテーブルの動作を最適化する為に利用されます。ほとんどの場合、それらのうちのどれも指定する必要はありません。これらのオプションは、指示されない限り全てのストレージ
        エンジンに適応します。与えられたストレージ
        エンジンに適応しないオプションは、受け入れられ、テーブル定義の一部として記憶されるでしょう。そのようなオプションは、後程もし異なるストレージ
        エンジンの利用の為にテーブルを変換する時
        ALTER TABLE
        を利用すれば適応されます。
      
            AUTO_INCREMENT
          
            テーブルの初期 AUTO_INCREMENT
            値。MySQL 5.1 では、これは
            MyISAM、MEMORY、そして
            InnoDB
            テーブルに対して機能します。これはまた、MySQL
            5.1.6 以降も ARCHIVE
            テーブルに対しても機能します。
            AUTO_INCREMENT テーブル
            オプションをサポートしないエンジンに最初の自動インクリメント値を設定する為に、テーブルを作成した後、求められる値よりの1少ない値の
            「dummy」
            行を挿入し、その後ダミー行を削除してください。
          
            CREATE TABLE ステートメント内の
            AUTO_INCREMENT テーブル
            オプションをサポートするエンジンには、AUTO_INCREMENT
            値をリセットする為に ALTER TABLE
            
            を利用する事もできます。その値は、現在カラム内にある最大値よりも小さく設定する事はできません。
          tbl_name AUTO_INCREMENT =
            N
            AVG_ROW_LENGTH
          
テーブルの平均行長近似値です。可変サイズ行を持つ大きいテーブルに対してのみ、これを設定する必要があります。
            MyISAM
            テーブルを作成する時、MySQL
            はテーブルが最終的にどの程度の大きさになるのかを決める為に
            MAX_ROWS と
            AVG_ROW_LENGTH
            オプションの製品を利用します。もしどちらのオプションも指定しなければ、テーブルの最大サイズはデフォルトで256
            TB になります。(もし使用している OS
            がその大きさのファイルをサポートしていなければ、テーブル
            サイズはファイル
            サイズ制限に制約されます。)もし大きいファイルが必要無く、インデックスを小さく早くする為にポインタサイズを小さくしたければ、myisam_data_pointer_size
            システム変数を設定する事でデフォルトのポインタ
            サイズを小さくする事ができます。(詳しくは
            項4.2.3. 「システム変数」
            をご確認ください。)もし全てのテーブルをデフォルトの制限よりも大きくする事を希望し、必要以上にテーブルが遅く、大きくなっても良いのであれば、この変数を設定する事でデフォルトのポインタサイズを増やす事ができます。
          
            [DEFAULT] CHARACTER SET
          
            テーブルにデフォルト文字セットを指定します。CHARSET
            は CHARACTER SET の同義語です。
          
            CHECKSUM
          
            MySQL に全ての行のライブ
            チェックサムを維持させたければこれを1に設定してください。(これはテーブルが変更される度に
            MySQL
            が自動的に更新するチェックサムです。)これはテーブルの更新スピードを少し遅くしますが、壊れたテーブルを見つけるのが早くなります。CHECKSUM
            TABLE
            ステートメントはチェックサムをリポートします。(MyISAM
            のみです。)
          
            COLLATE
          
テーブルにデフォルト照合を指定します。
            COMMENT
          
最高60文字のテーブルに対するコメントです。
            CONNECTION
          
            FEDERATED
            テーブルの接続文字列です。(注意:MySQL
            の古いバージョンは COMMENT
            オプションを接続文字列に利用していました。)
          
            DATA DIRECTORY、INDEX
            DIRECTORY
          
            DATA
            DIRECTORY='
            か directory'INDEX
            DIRECTORY='
            を利用する事で、directory'MyISAM
            ストレージ エンジンがテーブルのデータ
            ファイルとインデックス
            ファイルをどこに置く必要があるのかを指定する事ができます。ディレクトリは、相対パス名ではなくフルパス名でなければいけません。
          
            これらのオプションは
            --skip-symbolic-links
            オプションを利用していない時だけ機能します。OS
            にはまた、有効なスレッド セーフな
            realpath()
            コールがなければいけません。詳細については、項6.6.1.2. 「Unix 上のテーブルに対するシンボリックリンクの使用」
            をご参照ください。
          
            DELAY_KEY_WRITE
          
            キー更新をテーブルが閉じられる時まで遅らせたければこれを1に設定してください。項4.2.3. 「システム変数」
            内の delay_key_write
            システム変数についての説明を参照してください。(MyISAM
            のみです。)
          
            INSERT_METHOD
          
            もしデータを MERGE
            テーブルに挿入したければ、その行が挿入されるべきテーブルのINSERT_METHOD
            を利用して指定する必要があります。INSERT_METHOD
            は MERGE
            テーブルにのみ有効なオプションです。最初か最後のテーブルに挿入する為には
            FIRST か LAST
            値を、また挿入を防ぐ為には
            NO
            値を利用してください。詳しくは
            項13.6. 「MERGE ストレージエンジン」
            を参照してください。
          
            KEY_BLOCK_SIZE
          
            このオプションはインデックス キー
            ブロックに利用するサイズについてストレージ
            エンジンにヒントを提供します。このエンジンは必要に応じて値を変更する事が可能です。0という値は、デフォルト値を利用しなければいけないという事を表しています。テーブル値を無効にする為に、個々のインデックス定義はそれ自身の
            KEY_BLOCK_SIZE
            値を指定する事ができます。KEY_BLOCK_SIZE
            は MySQL 5.1.10 で追加されました。
          
            MAX_ROWS
          
テーブル内に格納する予定の最大行数。これは、厳しい制限というよりは、ストレージ エンジンに対して、テーブルが少なくてもこの程度の行数を格納できる必要があるという事を表すヒントのような物です。
            MIN_ROWS
          
テーブル内に格納する予定の最小行数
            PACK_KEYS
          
            PACK_KEYS は MyISAM
            テーブルとだけ効果を発揮します。小さいインデックスを持ちたければ、このオプションを1に設定してください。これは通常更新スピードを遅くし、読み込みを早くします。オプションを0に設定すると、全てのキー
            パッキングが無効になります。これを
            DEFAULT
            に設定すると、ストレージ
            エンジンには長い CHAR や
            VARCHAR
            カラムだけをパックするように指令が出ます。
          
            もし PACK_KEYS
            を利用しなければ、デフォルトでは文字列をパックしますが、数字はパックしません。もし
            PACK_KEYS=1
            を利用すると、数字もパックされます。
          
バイナリ数値キーをパックする時、MySQL はプリフィックス圧縮を利用します。
前のキーのいくつのバイト分が次のキーと同じであるかを示す為に、全てのキーは1バイト分多く必要とします。
行のポインタは、圧縮を強化する為に、キーの直後に高バイト順で直接格納されます。
            これは、もし2つの連続した行上に複数の同等なキーを持っていたら、全ての後続する
            「同じ」
            キーは通常2バイトしか利用しないという事を意味します。(行のポインタを含む)これを、後続キーが
            storage_size_for_key + pointer_size
            を取る通常のケースと比べてみてください。(ポインタサイズは通常4)反対に、同じ数値を多く持つ場合のみ、プリフィックス圧縮の恩恵を多いに受ける事ができます。もし全てのキーが全く異なり、NULL
            値を持つ事ができるキーでなければ、1つのキーに対してもう1バイト多く利用する事になります。(この場合、もしキーが
            NULL
            であれば、パックされたキー長はマークする為に利用された物と同じバイト数で格納されます。)
          
            PASSWORD
          
            パスワードを持つ .frm
            ファイルを暗号化します。このオプションは、スタンダード
            MySQL バージョン内では何も行いません。
          
            RAID_TYPE
          
            RAID サポートは MySQL 5.0
            以降は削除されました。RAID
            の情報に関しては、http://dev.mysql.com/doc/refman/4.1/en/create-table.html
            を参照してください。
          
            ROW_FORMAT
          
            行がどのように格納されるべきかを定義します。MyISAM
            テーブルに対しては、静的、または可変長行フォーマットのオプション値は
            FIXED か DYNAMIC
            になり得ます。 myisampack
            はタイプを COMPRESSED
            に設定します。詳しくは
            項13.4.3. 「MyISAM テーブルストレージフォーマット」
            を参照してください。
          
            InnoDB
            テーブルに対しては、行はデフォルトでコンパクト
            フォーマットに格納されます。(ROW_FORMAT=COMPACT)ROW_FORMAT=REDUNDANT
            を指定する事により、MySQL
            の古いバージョンで利用される非コンパクト
            フォーマットをリクエストする事もできます。
          
            UNION
          
            UNION は、同一の
            MyISAM
            テーブルの集まりを1つの物としてアクセスしたい時に利用する事ができます。これは
            MERGE
            テーブルとのみ機能します。詳しくは
            項13.6. 「MERGE ストレージエンジン」
            を参照してください。
          
            MERGE
            テーブルにマップするテーブルに、SELECT、UPDATE、そして
            DELETE
            権限を持たなければいけません。(注意:以前は、全てのテーブルは、MERGE
            テーブルそのものと同じデータベース内にある必要がありました。この制限はもう適応されません。)
          
        partition_options は CREATE
        TABLE
        を利用して作成されたテーブルの領域確保をコントロールする為に利用できます。重要:このセクションの冒頭で紹介された
        partition_options
        の構文内に表された全てのオプションが、全ての領域確保タイプに有効であるわけではありません。テーブル作成と
        MySQL
        領域確保に関係する他のステートメントの追加例だけでなく、MySQL
        内での領域確保の機能と使用に関しての完全な情報については、各タイプの情報仕様の為の個別タイプをリストした物、そして
        章 15. パーティショニング を見てください。
      
        partition_options
        は、もし利用されるなら最小の PARTITION
        BY
        条項を含む必要があります。この条項はパーティションを決めるのに利用される関数を含んでいます。その関数は、num
        が分割数の時、1から num
        の整数値を返します。(1つのテーブルが含むユーザー定義パーティションの最高数は1024です。
        このセクション — の後半で紹介される
        —サブ
        パーティションはこの最高数に含まれています。)MySQL
        5.1
        でこの機能に対して有効な物は次のリストに表されています。
      
            HASH(:行を置く為のキーを作成する為に1つ、または複数のカラムをハッシュします。expr)expr
            は1つ、または複数のテーブルカラムを利用する式です。これは、単一整数値を生む正当な
            MySQL 式(MySQL
            関数を含む)であればどれでもよいです。例えば、これらは全て
            PARTITION BY HASH
            を利用した有効な CREATE TABLE
            ステートメントです。
          
CREATE TABLE t1 (col1 INT, col2 CHAR(5))
    PARTITION BY HASH(col1);
CREATE TABLE t1 (col1 INT, col2 CHAR(5))
    PARTITION BY HASH( ORD(col2) );
CREATE TABLE t1 (col1 INT, col2 CHAR(5), col3 DATETIME)
    PARTITION BY HASH ( YEAR(col3) );
            PARTITION BY HASH と、VALUES
            LESS THAN や VALUES IN
            条項は一緒に利用しません。
          
            PARTITION BY HASH
            はパーティション数によって分割された
            (モジュール)expr
            の残りを利用します。追加情報については
            項15.2.3. 「HASH パーティショニング」
            を参照してください。
          
            LINEAR
            キーワードは異なるアルゴリズムを若干必要とします。lこの場合、行が格納されるパーティション数は、1つ、または複数の論理的な
            AND
            操作の結果計算されます。線形ハッシングについての説明と例に関しては、
            項15.2.3.1. 「LINEAR HASH パーティショニング」
            を参照してください。
          
            KEY(:MySQL
            がハッシング機能を均等なデータ分布を保障する為に提供するという事以外、これは
            column_list)HASH
            と似ています。column_list
            引数は単にテーブル
            カラムのリストです。この例は、キーによって4つのパーティションに分割された単純なテーブルを表しています。
          
CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE)
    PARTITION BY KEY(col3)
    PARTITIONS 4;
            キーによって分割されたテーブルには、LINEAR
            キーワードを利用した線形領域確保を採用する事ができます。これは
            HASH
            によって分割されたテーブルと同じ効果を持ちます。これは、分割数はモジュールではなく
            &
            演算子を利用して求められるという事を意味します。(詳細に関しては
            項15.2.3.1. 「LINEAR HASH パーティショニング」、と
            項15.2.4. 「KEY パーティショニング」
            を参照してください。)この例は、5つのパーティション間でデータを分布する為にキーによる線形領域確保を利用しています。
          
CREATE TABLE tk (col1 INT, col2 CHAR(5), col3 DATE)
    PARTITION BY LINEAR KEY(col3)
    PARTITIONS 5;
            PARTITION BY KEY と、VALUES
            LESS THAN や VALUES IN
            条項は一緒に利用しません。
          
            RANGE:この場合、expr
            は VALUES LESS THAN
            演算子のセットを利用して値の範囲を表します。範囲の領域確保を利用する時、VALUES
            LESS THAN
            を利用して最低1つのパーティションを定義する必要があります。VALUES
            IN
            を範囲の領域確保に利用する事はできません。
          
            VALUES LESS THAN
            は直定数値、または単一値を評価する式のどちらかと一緒に利用する事ができます。
          
次のスキームに従って、年次値を含むカラム上で分割したいテーブルを持っていると仮定します。
| パーティション数: | 年次範囲: | 
| 0 | 1990以前 | 
| 1 | 1991 – 1994 | 
| 2 | 1995 – 1998 | 
| 3 | 1999 – 2002 | 
| 4 | 2003 – 2005 | 
| 5 | 2006以降 | 
            そのような領域確保スキームを実施するテーブルはここに表されている
            CREATE TABLE
            ステートメントによって実現されます。
          
CREATE TABLE t1 (
    year_col  INT,
    some_data INT
)
PARTITION BY RANGE (year_col) (
    PARTITION p0 VALUES LESS THAN (1991),
    PARTITION p1 VALUES LESS THAN (1995),
    PARTITION p2 VALUES LESS THAN (1999),
    PARTITION p3 VALUES LESS THAN (2002),
    PARTITION p4 VALUES LESS THAN (2006),
    PARTITION p5 VALUES LESS THAN MAXVALUE
);
            PARTITION ... VALUES LESS THAN ...
            ステートメントは連続法で機能します。VALUES
            LESS THAN MAXVALUE
            は、指示されない限り、最大値よりも大きい
            「leftover」
            値を指定する為に機能します。
          
            VALUES LESS THAN 条項は
            switch ... case ブロックの
            case
            部分と似た方法で連続的に機能するという事を覚えて置いてください。(C、Java、そしてPHP等のような多くのプログラム言語内で見られるのと同じように)これは、それぞれの連続した
            VALUES LESS THAN
            内で指定された上限はその前の物よりも大きく、MAXVALUE
            に参照を付ける物がリストの一番最後に来るという方法で条項を配列しなければいけない、という事を意味します。
          
            LIST(:これは州や国のコードなどのような、制限された値のセットを持つテーブル
            カラムに基づいたパーティションを割り当てる時に便利です。このような場合、特定の州や国に関係している行を1つのパーティションに指定したり、または、特定の州や国のセットに対してパーティションを用意しておく事ができます。これは、expr)VALUES
            IN
            だけが各パーティションに許容値を指定するのに利用されるという事を除いて、RANGE
            と似ています。
          
            VALUES IN
            はマッチする値のリストと共に利用されます。例えば、次のように領域確保スキームを作成する事ができます。
          
CREATE TABLE client_firms (
    id   INT,
    name VARCHAR(35)
)
PARTITION BY LIST (id) (
    PARTITION r0 VALUES IN (1, 5, 9, 13, 17, 21),
    PARTITION r1 VALUES IN (2, 6, 10, 14, 18, 22),
    PARTITION r2 VALUES IN (3, 7, 11, 15, 19, 23),
    PARTITION r3 VALUES IN (4, 8, 12, 16, 20, 24)
);
            リストの領域確保を利用する時、VALUES
            IN
            を利用して最低1つのパーティションを定義する必要があります。VALUES
            LESS THAN を PARTITION BY LIST
            と一緒に利用する事はできません。
          
            注意:現在は、VALUES
            IN
            と共に利用される値のリストは整数値のみで構成されています。
          
            パーティション数は、num
            がパーティション数である PARTITIONS
            
            条項を利用して任意に指定されます。この条項、そして
            numPARTITION
            条項が両方利用されたら、num
            は PARTITION
            条項を利用して宣言されたパーティションの合計数と同一でなければいけません。
          
            注意:RANGE
            か LIST
            によって領域確保されたテーブルを作成するのに
            PARTITIONS
            条項を利用したかどうかに関わらず、テーブル定義の中に最低1つ以上の
            PARTITION VALUES
            条項を含む必要があります。(下記参照)
          
            パーティションは任意でサブ
            パーティションに分解する事もあります。これは任意の
            SUBPARTITION BY
            条項を利用して指示する事ができます。サブ
            パーティションは HASH か
            KEY
            によって行われるでしょう。これらのどちらかは
            LINEAR
            でしょう。これらは、既に説明された同等な領域確保のタイプと同じように機能します。(LIST
            や RANGE でサブ
            パーティションするのは不可能です。)
          
            整数値が後に続く SUBPARTITIONS
            キーワードを利用してサブ
            パーティション数を指示する事ができます。
          
            MySQL 5.1.12 で、PARTITIONS や
            SUBPARTITIONS
            条項で利用された値の厳密なチェックを紹介しています。このバージョンから、この値は次のルールを遵守します。
          
値は正数、ゼロ以外の整数でなければいけません。
ゼロが前に付いてはいけません。
                値は整数直定数である必要があり、式にはなり得ません。例えば、0.2E+01
                が 2
                であると評価されたとしても、PARTITIONS
                0.2E+01 は許されません。(バグ
                #15890)
              
        各パーティションは
        partition_definition
        条項を利用して個別に定義されるでしょう。この条項を形成するそれぞれの部分は次のような物です。
      
            PARTITION
            :これはパーティションの論理名を指定します。
          partition_name
            VALUES
            条項:範囲の領域確保に関しては、各パーティションが
            VALUES LESS THAN
            条項を含む必要があり、リストの領域確保に関しては、各パーティションに対して
            VALUES IN
            条項を指定する必要があります。これは、どの行がこのパーティションに格納されるのかという事を決める為に利用されます。構文例に関しては、章 15. パーティショニング
            のパーティション
            タイプに関する説明を参照してください。
          
            任意の COMMENT
            条項はパーティションを説明する為に利用されるでしょう。.このコメントは単一引用句で始まらなければいけません。例:
          
COMMENT = 'Data for the years previous to 1999'
            DATA DIRECTORY と INDEX
            DIRECTORY
            は、このパーティションのデータとインデックスがそれぞれどこに格納されるのかを指示する為に利用されます。data_dirindex_dir
CREATE TABLE th (id INT, name VARCHAR(30), adate DATE)
PARTITION BY LIST(YEAR(adate))
(
  PARTITION p1999 VALUES IN (1995, 1999, 2003)
    DATA DIRECTORY = '/var/appdata/95/data'
    INDEX DIRECTORY = '/var/appdata/95/idx',
  PARTITION p2000 VALUES IN (1996, 2000, 2004)
    DATA DIRECTORY = '/var/appdata/96/data'
    INDEX DIRECTORY = '/var/appdata/96/idx',
  PARTITION p2001 VALUES IN (1997, 2001, 2005)
    DATA DIRECTORY = '/var/appdata/97/data'
    INDEX DIRECTORY = '/var/appdata/97/idx',
  PARTITION p2000 VALUES IN (1998, 2002, 2006)
    DATA DIRECTORY = '/var/appdata/98/data'
    INDEX DIRECTORY = '/var/appdata/98/idx'
);
            DATA DIRECTORY と INDEX
            DIRECTORY は、MyISAM
            テーブルで利用される CREATE
            TABLE ステートメントの
            table_option
            条項と同じ形で機能します。
          
各パーティションには、1つのデータ ディレクトリとインデックス ディレクトリが指定されます。もし指定されなければ、データとインデックスはデフォルトで MySQL データ ディレクトリに格納されます。
            パーティション内に格納する行の最大、最小数をそれぞれ指定する為に
            MAX_ROWS と MIN_ROWS
            が利用されます。max_number_of_rows
            と min_number_of_rows
            の値は正整数でなければいけません。同名のテーブル
            レベル
            オプションと同様に、これらはサーバに対してただの
            「提案」
            として機能し、厳しい制限ではありません。
          
            任意の TABLESPACE
            条項は、パーティションのテーブルスペースを指定するのに利用されるでしょう。MySQL
            クラスタにのみ利用されます。
          
            任意の [STORAGE] ENGINE
            条項は、この MySQL
            サーバにサポートされたエンジンであるこのパーティション内のテーブルが、指定されたストレージ
            エンジンを利用するように機能します。STORAGE
            キーワードとイコールのサイン(=)
            の両方は任意です。もしこのオプションを利用して、パーティションを特定するストレージ
            エンジンが設定されなければ、テーブル全体に適応するエンジンがこのパーティションで利用されます。
          
            注意:領域確保ハンドラは
            PARTITION と
            SUBPARTITION の両方に対して
            [STORAGE] ENGINE
            オプションを受け入れます。現在これを利用する唯一の方法は、全てのパーティション、サブ
            パーティションを同じストレージ
            エンジンに設定する事です。もし同じテーブル内で、パーティション、サブ
            パーティションに異なるストレージ
            エンジンを設定しようとするとエラーが発生します。エラー
            1469 (HY000): MySQL
            のこのバージョンではパーティション内でハンドラを混在させる事は許可されていません。.
            将来の MySQL 5.1
            リリース時には、領域確保に関するこの制限を取り除く予定です。
          
            NODEGROUP オプションは
            node_group_id
            によって確認されたノード
            グループの一部としてこのパーティションを機能させる為に利用できます。このオプションは
            MySQL クラスタに対してだけ利用可能です。
          
            パーティション定義は、1つかそれ以上の
            subpartition_definition
            条項を含みます。これらはそれぞれ、name
            が識別子のサブ パーティションである
            SUBPARTITION
            
            の最小値で構成されます。nameSUBPARTITION
            を利用した PARTITION
            キーワードの入れ替え以外は、サブ
            パーティション定義の構文はパーティション定義の構文と同一です。
          
            サブ パーティションは HASH か
            KEY
            によって行われなけれる必要があり、そして
            RANGE か LIST
            パーティション上のみで行われます。詳しくは
            項15.2.5. 「サブパーティショニング」
            を参照してください。
          
        パーティションは修正し、マージし、テーブルに追加し、テーブルからドロップする事ができます。これらのタスクを成し遂げる為の基本的な
        MySQL
        ステートメントについての情報は、項12.1.2. 「ALTER TABLE 構文」
        を参照してください。更なる詳細説明や例に関しては、項15.3. 「パーティショニング管理」
        を参照してください。
      
        CREATE TABLE
        ステートメントの最後に SELECT
        を追加する事で、1つのテーブルから別のテーブルを作成する事ができます。
      
CREATE TABLEnew_tblSELECT * FROMorig_tbl;
        MySQLは SELECT
        内の全ての要素に対して新しいカラムを作成します。例:
      
mysql>CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,->PRIMARY KEY (a), KEY(b))->ENGINE=MyISAM SELECT b,c FROM test2;
        これは、これらの3つのカラム
        a、b、そして
        c を利用して MyISAM
        テーブルを作成します。SELECT
        ステートメントからのカラムは、テーブル上に重ねられるのではなくテーブルの右側に添付される事を覚えて置いてください。次の例を参考にして下さい。
      
mysql>SELECT * FROM foo;+---+ | n | +---+ | 1 | +---+ mysql>CREATE TABLE bar (m INT) SELECT n FROM foo;Query OK, 1 row affected (0.02 sec) Records: 1 Duplicates: 0 Warnings: 0 mysql>SELECT * FROM bar;+------+---+ | m | n | +------+---+ | NULL | 1 | +------+---+ 1 row in set (0.00 sec)
        foo
        テーブル内のそれぞれの行には、foo
        からの値と新しいカラムのデフォルト値と共に
        bar に行が挿入されます。
      
        CREATE TABLE ... SELECT
        の結果出来るテーブル内では、CREATE
        TABLE
        部分の中でのみ名づけられたカラムが最初に来ます。両方で名づけられたカラムか
        SELECT
        部分の中でのみ名づけられたカラムがその後に来ます。SELECT
        カラムのデータ タイプは CREATE
        TABLE
        部分の中でカラムを指定する事によって無効にする事もできます。
      
もしデータをテーブルにコピーしている間にエラーが発生すると、それは自動的にドロップされるので作成されません。
        CREATE TABLE ... SELECT
        は自動的にインデックスを作成しません。これはステートメントを可能な限りフレキシブルにする為に意図的に行われます。もし作成したテーブルの中でインデックスを持ちたければ、SELECT
        ステートメントの前にこれらを指定しなければいけません。
      
mysql> CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
        データ
        タイプの変換が行われるかもしれません。例えば、AUTO_INCREMENT
        属性は保管されず、VARCHAR
        カラムが CHAR
        カラムになる事ができます。
      
        CREATE ... SELECT
        でテーブルを作成する時、必ずクエリの中では
        全ての関数呼び出しや式をエイリアスにしてください。もしそれをしなければ、CREATE
        ステートメントは失敗するか、望まないカラム名になってしまいます。
      
CREATE TABLE artists_and_works SELECT artist.name, COUNT(work.artist_id) AS number_of_works FROM artist LEFT JOIN work ON artist.id = work.artist_id GROUP BY artist.id;
発生したカラムに対して、データ タイプを明示的に指定する事もできます。
CREATE TABLE foo (a TINYINT NOT NULL) SELECT b+1 AS a FROM bar;
        元テーブルの中で指定されたカラム属性やインデックスを含む、他のテーブルの定義に基づき空のテーブルを作成するには、LIKE
        を利用してください。
      
CREATE TABLEnew_tblLIKEorig_tbl;
コピーは元テーブルと同じバージョンのテーブル ストレージ フォーマットを利用して作成されます。
        CREATE TABLE ... LIKE
        は、元テーブルに対して、または外部キー定義に対して指示された
        DATA DIRECTORY や INDEX
        DIRECTORY テーブル
        オプションを保管しません。
      
        ユニーク
        キー値を複製する行をどのように扱うかを指示する為に、IGNORE
        か REPLACE によって
        SELECT
        を先行させる事ができます。IGNORE
        利用すると、ユニーク
        キー値上に既存の行を複製する新しい行は廃棄されます。REPLACE
        を利用すると、新しい行は同じユニーク
        キー値を持つ行を置き換えます。もし
        IGNORE も REPLACE
        も指示されなければ、複製ユニーク
        キー値はエラーになります。
      
        バイナリ
        ログが元テーブルを再作成する為に利用できる事を保障する為に、MySQL
        は CREATE TABLE ... SELECT
        の最中の並列挿入を許可しません。
      

