CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
[table_options] [select_statement]
または
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(] LIKE old_tbl_name [)];
create_definition:
    col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
            [[PRIMARY] KEY] [COMMENT 'string'] [reference_definition]
  | [CONSTRAINT [symbol]] PRIMARY KEY (index_col_name,...)
  | KEY [index_name] (index_col_name,...)
  | INDEX [index_name] (index_col_name,...)
  | [CONSTRAINT [symbol]] UNIQUE [INDEX] [index_name] (index_col_name,...)
  | FULLTEXT [INDEX] [index_name] (index_col_name,...)
  | [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)
            [reference_definition]
  | CHECK (expr)
type:
    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]
  | CHAR(length) [BINARY | ASCII | UNICODE]
  | VARCHAR(length) [BINARY]
  | DATE
  | TIME
  | TIMESTAMP
  | DATETIME
  | TINYBLOB
  | BLOB
  | MEDIUMBLOB
  | LONGBLOB
  | TINYTEXT
  | TEXT
  | MEDIUMTEXT
  | LONGTEXT
  | ENUM(value1,value2,value3,...)
  | SET(value1,value2,value3,...)
index_col_name:
        col_name [(length)] [ASC | DESC]
reference_definition:
        REFERENCES tbl_name [(index_col_name,...)]
                   [MATCH FULL | MATCH PARTIAL]
                   [ON DELETE reference_option]
                   [ON UPDATE reference_option]
reference_option:
        RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT
table_options: table_option [table_option] ...
table_option:
    TYPE = {BDB | HEAP | ISAM | InnoDB | MERGE | MRG_MYISAM | MYISAM }
  | AUTO_INCREMENT = #
  | AVG_ROW_LENGTH = #
  | CHECKSUM = {0 | 1}
  | COMMENT = 'string'
  | MAX_ROWS = #
  | MIN_ROWS = #
  | PACK_KEYS = {0 | 1 | DEFAULT}
  | PASSWORD = 'string'
  | DELAY_KEY_WRITE = {0 | 1}
  | ROW_FORMAT = { DEFAULT | DYNAMIC | FIXED | COMPRESSED }
  | RAID_TYPE = { 1 | STRIPED | RAID0 } RAID_CHUNKS=#  RAID_CHUNKSIZE=#
  | UNION = (table_name,[table_name...])
  | INSERT_METHOD = { NO | FIRST | LAST }
  | DATA DIRECTORY = 'absolute path to directory'
  | INDEX DIRECTORY = 'absolute path to directory'
  | DEFAULT CHARACTER SET character_set_name [COLLATE collation_name]
select_statement:
    [IGNORE | REPLACE] [AS] SELECT ...     (Some legal select statement)
        CREATE TABLE
        では、指定した名前のテーブルが作成されます。
        使用可能なテーブル名の規則は、項6.1.2. 「データベース名、テーブル名、インデックス名、カラム名、エイリアス名」
        で説明しています。
        デフォルトでは、テーブルはカレントデータベースに作成されます。
        テーブルがすでに存在する場合、カレントデータベースがない場合、またはデータベースが存在しない場合には、エラーが発生します。
      
        MySQL バージョン 3.22 以降では、テーブル名を
        db_name.tbl_name
        の形式で指定することで、指定したデータベースにテーブルを作成することができます。
        これは、カレントデータベースの有無にかかわらず有効です。
      
        MySQL バージョン 3.23
        以降では、テーブルの作成時に
        TEMPORARY
        キーワードを指定することができます。テンポラリテーブルは現在の接続の間のみ有効で、接続が閉じると自動で削除されます。そのため、異なる
        2
        つの接続が同じテンポラリテーブル名を使用できます。この場合、それぞれの接続のテンポラリテーブル間でコンフリクトが発生したり、同名の既存のテーブルとの間でコンフクリトが発生したりすることはありません(既存のテーブルはテンポラリテーブルが削除されるまで表示されません)。MySQL
        4.0.2
        以降では、テンポラリテーブルの作成には、CREATE
        TEMPORARY TABLES 権限が必要です。
      
        MySQL バージョン 3.23 以降では、キーワード
        IF NOT EXISTS
        を使用して、テーブルがすでに存在する場合に発生するエラーを回避することができます。注意:
        既存のテーブルの構造が、CREATE
        TABLE
        ステートメントで指定されたテーブルの構造と同じかどうかは検証されません。
      
        バージョン 4.1.0 以降では、属性
        SERIAL を BIGINT NOT NULL
        AUTO_INCREMENT UNIQUE
        のエイリアスとして使用できます。これは互換性を考慮した機能です。
      
        MySQL 3.23 以降では、CREATE TABLE
        ステートメントの最後に SELECT
        ステートメントを追加することによって、1
        つのテーブルから別のテーブルを作成することができます。
      
CREATE TABLE new_tbl SELECT * FROM orig_tbl;
        インデックスは新しいテーブルに持ち越されません。また、一部のカラム型の変換が行われる場合があります。たとえば、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;
MySQL 4.1 以降では、生成されるカラムの型を明示的に指定することができます。
CREATE TABLE foo (a tinyint not null) SELECT b+1 AS 'a' FROM bar;
        MySQL 4.1 では、LIKE
        でも、別のテーブルの定義に基づいて新しいテーブル(元のテーブルのカラム属性やインデックスをすべて含む)を作成することができます。
      
CREATE TABLE new_tbl LIKE orig_tbl;
        CREATE TABLE ... LIKE
        では、元のテーブルに指定された DATA
        DIRECTORY や INDEX DIRECTORY
        のテーブルオプションはいずれもコピーされません。
      
        データベースディレクトリ内の一部のファイルには、各テーブルの
        tbl_name
        が反映されます。MyISAM
        型のテーブルの場合、次のようになります。
      
| ファイル | 用途 | 
| tbl_name.frm | テーブル形式(定義)ファイル | 
| tbl_name.MYD | データファイル | 
| tbl_name.MYI | インデックスファイル | 
さまざまなカラム型の特性の詳細については、項6.2. 「カラム型」 を参照してください。
            NULL も NOT NULL
            も指定されていない場合、カラムは
            NULL
            が指定されているときと同じように処理される。
          
            整数型カラムは追加属性
            AUTO_INCREMENT
            を持つことができる。 インデックス付きの
            AUTO_INCREMENT カラムに
            NULL(推奨)または
            0
            を挿入すると、そのカラムには連続値の次の値が設定される。
            通常、これは value+1
            になる(value
            はテーブルに現在格納されているそのカラムの最大値)。
            AUTO_INCREMENT は 1
            から開始される。 See
            項11.1.3.32. 「mysql_insert_id()」。
          
            MySQL 4.1.1 以降では、--sql-mode
            サーバオプションまたは
            sql_mode サーバ変数に対して
            NO_AUTO_VALUE_ON_ZERO
            フラグを指定することによって、新しい連続値を生成する代わりに、AUTO_INCREMENT
            カラムに 0 を 0
            として格納することができる。 See
            項4.1.1. 「mysqld コマンドラインオプション」。
          
            AUTO_INCREMENT
            カラムの最大値が入ったレコードを削除した場合、その値は
            ISAM テーブルや
            BDB
            テーブルでは再利用されるが、MyISAM
            テーブルや InnoDB
            テーブルでは再利用されない。DELETE
            FROM table_name(WHERE
            節なし)を AUTOCOMMIT
            モードで実行してテーブル内のすべてのレコードを削除した場合、InnoDB
            を除くすべてのテーブル型で、連続値が初めから開始される。
            See 項7.5.12.5. 「InnoDB での AUTO_INCREMENT カラムの仕組み」。
          
            注意:
            AUTO_INCREMENT
            カラムはテーブルごとに 1
            つだけ存在できる。このカラムにはインデックスを付ける必要があり、また
            DEFAULT 値は設定できない。 MySQL
            バージョン 3.23
            では、AUTO_INCREMENT
            カラムは、正の値だけを持つ場合にのみ正しく機能する。負の数値が挿入されると、その値はきわめて大きな正数としてみなされる。
            これは、数値が正の数から負の数に
            ``折り返す''
            ときに発生する精度の問題を回避するためと、0
            が入った AUTO_INCREMENT
            カラムが誤って取得されないようにするためである。
          
            MyISAM テーブルと
            BDB
            テーブルでは、複合インデックスで
            AUTO_INCREMENT
            セカンダリカラムを指定できる。 See
            項3.6.9. 「AUTO_INCREMENT の使用」。
          
            MySQL と一部の ODBC
            アプリケーションとの互換性を確保するため、最後に挿入されたレコードの
            AUTO_INCREMENT
            値を次のクエリで検出することができる。
          
SELECT * FROM tbl_name WHERE auto_col IS NULL
            TIMESTAMP
            型カラムでは、他のカラム型とは異なる方法で
            NULL
            値が処理される。TIMESTAMP
            型カラムには、NULL
            は格納できない。カラムに NULL
            を挿入すると、カラムの値として現在の日時が設定される。TIMESTAMP
            型のカラムはこのように動作するため、NULL
            属性と NOT NULL
            属性は通常どおりには適用されず、それらを指定しても無視される。
          
            その一方で、TIMESTAMP
            型のカラムを MySQL
            クライアントにとって使用しやすくするために、サーバは、(実際には、TIMESTAMP
            型カラムには NULL
            値は格納されないにもかかわらず)TIMESTAMP
            型カラムについて、NULL
            値の割り当てが可能(true)と報告する。DESCRIBE
            tbl_name
            を使用してテーブルに関する記述を取得すると、これを確認できる。
          
            注意: TIMESTAMP
            型のカラムに、値として 0
            を設定するのは、NULL
            を設定するのとは異なる。0 は
            TIMESTAMP 型の有効な値である。
          
            
            DEFAULT
            値は定数でなければならず、関数や式を使用することはできない。
          
            DEFAULT
            値が指定されていない場合、そのカラムには、次の方法で、MySQL
            によって DEFAULT
            値が自動的に割り当てられる。
          
            値として NULL
            を取れるカラムの場合、デフォルト値は
            NULL になる。
          
            NOT NULL
            として宣言されているカラムの場合、デフォルト値はそれぞれのカラム型によって決まる。
          
                AUTO_INCREMENT
                属性を持つと宣言されていない数値型カラムの場合、デフォルトは
                0。AUTO_INCREMENT
                カラムの場合、デフォルト値は連続値の次の値になる。
              
                TIMESTAMP
                型以外の日付と時刻型の場合、デフォルトはその型に対応するゼロ値。テーブル内の最初の
                TIMESTAMP
                型カラムのデフォルト値は、現在の日時になる。
                See 項6.2.2. 「日付と時刻型」。
              
                ENUM
                型以外の文字列型の場合、デフォルト値は空の文字列。ENUM
                の場合、デフォルト値は最初の列挙値になる。
              
            デフォルト値は定数でなければならない。したがって、日付カラムのデフォルト値として、NOW()
            や CURRENT_DATE
            などの関数を設定することはできない。
          
            
            COMMENT
            オプションでは、カラムに関するコメントを指定することができる。
            コメントは SHOW CREATE TABLE
            ステートメントと SHOW FULL
            COLUMNS で表示される。
            このオプションは MySQL 4.1
            から利用可能(それ以前のバージョンでは、使用は可能だが無視される)。
          
            KEY は、通常 INDEX
            のシノニム。 バージョン 4.1 以降、キー属性
            PRIMARY KEY は単に
            KEY
            として指定することもできる。この機能は他のデータベースとの互換性を考慮して実装された。
          
            MySQL では、UNIQUE
            キーには重複のない値以外は格納できない。
            既存のレコードのキーと同じキーを持つ新しいレコードを追加しようとすると、エラーが発生する。
          
            
            PRIMARY KEY
            は、すべてのキーカラムが NOT
            NULL
            として定義されていなければならないユニーク
            KEY である。NOT
            NULL
            として明示的に定義されていないと、暗黙的(かつ自動的)に
            NOT NULL に設定される。MySQL
            において、このキーは PRIMARY
            と呼ばれる。個々のテーブルは PRIMARY
            KEY を 1 つだけ持つことができる。
            PRIMARY KEY
            がない場合に、何らかのアプリケーションがテーブルの
            PRIMARY KEY を要求すると、MySQL
            では、NULL
            カラムをまったく持たない最初の
            UNIQUE キーが PRIMARY
            KEYとして返される。
          
            複合インデックスを PRIMARY KEY
            にすることもできる。しかし、カラムの仕様で
            PRIMARY KEY
            キー属性を使用して複合インデックスは作成することはできない。そのようにしても、単一のカラムがプライマリとしてマークされるにすぎない。
            この場合、別に PRIMARY KEY(index_col_name,
            ...) 節を使用する必要がある。
          
            UNIQUE
            インデックスでは、インデックスのすべての値に重複がない状態でなければならない。ただし、例外として、そのインデックスのカラムの
            1 つで NULL
            値が格納可能な場合、複数の
            NULL 値を格納できる。
            この例外は BDB
            型のテーブルには適用されない。BDB
            型のテーブルには単一の NULL
            のみ格納可能。
          
            PRIMARY キーまたは
            UNIQUE
            キーが単一のカラムで構成されていて、そのカラム型が整数型の場合、そのキーは
            _rowid
            として参照することもできる(バージョン
            3.23.11 の新機能)。
          
            PRIMARY KEY
            でないインデックスに名前を割り当てないと、そのインデックスは
            index_col_name
            の最初のカラム名と同じ名前が割り当てられ、そのインデックスを一意(ユニーク)なものとするためのオプションのサフィックス(_2、_3、...)が付けられる。テーブルのインデックス名は
            SHOW INDEX FROM tbl_name
            を使用して確認できる。 See
            項4.6.8.1. 「データベース、テーブル、カラム、およびインデックスに関する情報の取得」。
          
            
            
            NULL
            値を持つことができるカラムに対するインデックスの作成は、MyISAM、InnoDB、BDB
            の各テーブル型でのみサポートしている。その他のテーブルでは、カラムが
            NOT NULL
            と宣言されていないとエラーになる。
          
            インデックスの指定で
            col_name(length)
            構文を使用することによって、CHAR
            型または VARCHAR
            型カラムの最初から length
            に指定した長さのバイトのみを使用するインデックスを作成できる。この方法で、インデックスファイルのサイズをかなり小さくすることができる。
            See 項5.4.4. 「カラムインデックス」。
          
            
            
            
            
            BLOB 型と TEXT
            型のカラムのインデックスの作成は、MyISAM
            テーブルと(MySQL 4.0.14
            以降の)InnoDB
            テーブルでのみサポートしている。BLOB
            型または TEXT
            型のカラムにインデックスを付けるときには、インデックスの長さ(最大
            255
            バイト)を必ず指定する必要がある。次に例を示す。
CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));
            index_col_name
            の指定では、最後に ASC または
            DESC を付けることができる。
            これらのキーワードは、昇順または降順によるインデックス値の格納を指定できるようにする今後の拡張に対応している。現時点では、これらのキーワードは解析されるが無視される。インデックス値は常に昇順で格納される。
          
            TEXT 型または BLOB
            型のカラムで ORDER BY または
            GROUP BY
            が使用されていると、サーバは、最初の部分の、
            max_sort_length
            サーバ変数が示す数のバイトのみを使用して値をソートする。
            See 項6.2.3.2. 「BLOB 型と TEXT 型」。
          
            MySQL バージョン 3.23.23 以降では、特殊な
            FULLTEXT
            インデックスも作成できる。これは全文検索に使用される。FULLTEXT
            インデックスは、MyISAM
            テーブルでのみサポートしている。このインデックスは、CHAR
            型、VARCHAR
            型、TEXT
            型のカラムからのみ作成できる。
            インデックスの作成は常にカラム全体に対して行われる。部分的なインデックスの作成は行われない。処理の詳細については、項6.8. 「MySQL 全文検索」
            を参照。
          
            MySQL バージョン 3.23.44
            以降では、InnoDB
            テーブルで外部キー制約のチェックをサポートしている。See
            項7.5. 「InnoDB テーブル」。 注意:
            InnoDB での FOREIGN
            KEY
            構文は上に示した構文より制限されている。参照テーブルのカラム名は、必ず明示的に指定する必要がある。
            InnoDB では、MySQL
            3.23.50以降、外部キーに対する ON
            DELETE アクションを、また MySQL 4.0.8
            以降では ON UPDATE
            アクションをサポートしている。
            正確な構文については、このマニュアルの
            InnoDB のセクションを参照。 See
            項7.5.5.2. 「FOREIGN KEY 制約」。
            他のテーブル型については、MySQL サーバは
            CREATE TABLE コマンドの
            FOREIGN
            KEY、CHECK、REFERENCES
            の各構文を解析するが、それ以上の処理は行わない。
            See 項1.8.4.5. 「外部キー」。
          
            MyISAM テーブルと
            ISAM テーブルの場合、各
            NULL カラムは 1
            ビット余分に使用して、最も近いバイトに切り上げられる。
            バイトでの最大レコード長は次のように計算される。
          
レコード長 = 1
             + (カラム長の合計)
             + (NULL カラムの数 + delete_flag + 7)/8
             + (可変長カラムの数)
            静的レコード形式のテーブルでは、delete_flag
            は
            1。静的テーブルでは、行レコードで、そのレコードが削除されたものであるかを示すフラグ用に
            1
            ビットが使用される。動的テーブルでは、このフラグは可変長レコードの頭に格納されるため、delete_flag
            は 0 になる。
          
            これらの計算は InnoDB
            テーブルには適用されない。InnoDB
            テーブルでは、NULL
            カラムの格納サイズは NOT NULL
            カラムと比較して変わらない。
          
            table_options オプションと
            SELECT オプションは MySQL
            バージョン 3.23 以降でのみ実装されている。
          
            テーブル型を指定する TYPE
            オプションは次の値を取る。
          
| テーブル型 | 説明 | 
| BDBまたはBerkeleyDB | ページのロックを行う、トランザクションセーフテーブル。
                    See 項7.6. 「 BDBまたはBerkeleyDBテーブル」。 | 
| HEAP | このテーブルのデータはメモリにしか格納されない。
                    See 項7.4. 「 HEAPテーブル」。 | 
| ISAM | 元のストレージエンジン。 See 項7.3. 「 ISAMテーブル」。 | 
| InnoDB | 行ロックを行う、トランザクションセーフテーブル。
                    See 項7.5. 「 InnoDBテーブル」。 | 
| MERGE | 1 つのテーブルとして使用される MyISAMテーブルの集まり。 See
                    項7.2. 「MERGEテーブル」。 | 
| MRG_MyISAM | MERGEのエイリアス。 | 
| MyISAM | ISAMに代わる、バイナリの移植が可能な新しいストレージエンジン。
                    See 項7.1. 「MyISAMテーブル」。 | 
See 章 7. MySQL のテーブル型。
            テーブル型が指定されているときに、そのテーブル型が使用できない場合、MySQL
            では、代わりに MyISAM
            が使用される。 たとえば、テーブル定義に
            TYPE=BDB
            オプションが含まれているときに、BDB
            型のテーブルを MySQL
            サーバでサポートしていない場合、テーブルは
            MyISAM
            テーブルとして作成される。そのため、マスタにトランザクションテーブルがありながら、スレーブでは非トランザクションテーブルを作成する(速度を上げるため)といった、レプリケーション設定が可能になる。MySQL
            4.1.1
            では、指定したテーブル型が受け付けられないと警告が出力される。
          
その他のテーブルオプションは、テーブルの動作を最適化するために使用される。ほとんどの場合、これらはいずれも指定しなくてよい。 これらのオプションは、特に断りがない限り、すべてのテーブル型に適用される。
| オプション | 説明 | 
| AUTO_INCREMENT | テーブルに設定する次の AUTO_INCREMENT値(MyISAMテーブルのみ。InnoDBテーブルの最初の AUTO_INCREMENT
                    値を設定するには、1
                    つ少ない値を持つダミーレコードを挿入し、後からそのダミーレコードを削除する)。 | 
| AVG_ROW_LENGTH | テーブルのレコードの長さの平均の近似値。可変サイズレコードを持つ大きなテーブル以外では、この値を設定する必要はない。 | 
| CHECKSUM | すべてのローのチェクサムを MySQL
                    に維持させるには、この値を 1
                    に設定する(それにより、テーブルの更新速度はやや遅くなるが、破損したテーブルを見つけやすくなる)( MyISAMテーブルのみ)。 | 
| COMMENT | テーブルに関する、60 文字のコメント。 | 
| MAX_ROWS | テーブルに格納する予定の最大レコード数。 | 
| MIN_ROWS | テーブルに格納する予定の最小レコード数。 | 
| PACK_KEYS | インデックスのサイズを小さくするには、この値を 1
                    に設定する。通常、それにより、更新速度が遅くなるが、読み取りは速くなる( MyISAMテーブルとISAMテーブルのみ)。この値を 0
                    に設定すると、キーのパックがすべて無効化される。この値をDEFAULTに設定すると(MySQL 4.0
                    の場合)、ストレージエンジンによって、CHAR型またはVARCHAR型の長いカラムのみがパックされる。 | 
| PASSWORD | パスワードを使用して .frmファイルを暗号化する。標準の MySQL
                    バージョンでは、このオプションを指定しても何も行われない。 | 
| DELAY_KEY_WRITE | テーブルが閉じられるまでキーテーブルの更新を遅らせるには、この値を1
                    に設定する( MyISAMテーブルのみ)。 | 
| ROW_FORMAT | レコードの格納方法を定義する。現在、このオプションは、形式として DYNAMICとFIXEDをサポートしているMyISAMテーブルに対してのみ機能する。 See
                    項7.1.2. 「MyISAMテーブル形式」。 | 
            MyISAM
            テーブルの使用時には、MySQL
            で、MAX_ROWS * AVG_ROW_LENGTH
            の積によって、結果のテーブルがどれくらいのサイズになるかの計算が行われる。上記のオプションのどれも指定しないと、テーブルの最大サイズは
            4G(使用しているオペレーティングシステムで
            2G
            のテーブルしかサポートされていないときは
            2G)になる。その理由は、単に大きなファイルが必要でない場合に、ポインタのサイズを抑制することによって、インデックスをより小さく、より迅速化することにある。
          
            PACK_KEYS
            を指定しないと、デフォルトでは、文字列のパックのみ行われ、数値のパックは行われない。PACK_KEYS=1
            と指定すると、数値もパックされる。
          
            バイナリ数値キーのパック時には、MySQL
            によってプリフィックスの圧縮が行われる。
            つまり、これによって大きな利益を得られるのは、同じ数値が数多く存在する場合に限られる。プリフィックスの圧縮では、前のキーの何バイトが次のキーと同じであるかを示す追加の
            1 バイトが各キーで必要になる(注意:
            圧縮のパフォーマンスを良くするため、キーの直後に、レコードのポインタが上位バイトから下位バイトの順に格納される)。したがって、連続する
            2
            つのレコードに同じキーが数多くあるとき、通常、``同じ''
            キーの後に続くものはいずれも 2
            バイト(レコードのポインタも含めて)しか取らない。それに比べて通常の場合は、後に続くキーで
            storage_size_for_key + pointer_size 分(通常 4
            バイト)必要になる。その一方、すべてのキーがまったく異なる場合は、NULL
            値を持てない各キーで 1
            バイト余分に使用される(この場合、パックされたキーの長さは、キーが
            NULL
            であるかどうかを示すバイトと同じバイトに格納される)。
          
            MySQL 3.23 以降では、CREATE
            ステートメントの後に SELECT
            を指定すると、SELECT
            のすべての要素に対応する新しいフィールドが
            MySQL によって作成される。次に例を示す。
          
mysql>CREATE TABLE test (a INT NOT NULL AUTO_INCREMENT,->PRIMARY KEY (a), KEY(b))->TYPE=MyISAM SELECT b,c FROM test2;
            この場合、a、b、c の 3 つのカラムを持つ
            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
            では、インデックスの作成は自動では行われない。これは、このコマンドをできるだけ柔軟なものにするためである。作成するテーブルにインデックスが必要な場合は、SELECT
            ステートメントの前にインデックスを指定する。
          
mysql> CREATE TABLE bar (UNIQUE (n)) SELECT n FROM foo;
テーブルへのデータのコピー時にエラーが発生した場合、データは自動で削除される。
            SELECT の前に
            IGNORE または
            REPLACE
            を付けることで、ユニークキー値が重複するレコードの処理方法を指定できる。
            IGNORE
            の場合、新しいレコードのユニークキー値が既存のレコードの値と重複していると、その新しいレコードは破棄される。REPLACE
            の場合、新しいレコードによって、同じユニークキー値を持つ既存のレコードが置換される。IGNORE
            と REPLACE
            のどちらも指定していない場合、ユニークキー値の重複が検出されるとエラーになる。
          
            更新ログやバイナリログを使用して元のテーブルを確実に再作成できるようにするため、MySQL
            では CREATE TABLE ... SELECT
            実行中の同時挿入は行えない。
          
            
            
            RAID_TYPE
            オプションでは、大きなファイルをサポートしていないオペレーティングシステムで
            MyISAM
            データファイル(インデックスファイルではなく)に対する
            2G または 4G
            の制限を超すことができる。注意:
            このオプションは大きなファイルをサポートしているファイルシステムでは推奨されない。
          
            異なる物理ディスク上に RAID
            ディレクトリを配置することによって I/O
            のボトルネックを迅速化することができる。RAID_TYPE
            はあらゆるオペレーティングシステムで機能するが、MySQL
            のコンフィギャを --with-raid
            として行っておく必要がある。現時点で使用可能な
            RAID_TYPE は
            STRIPED(1 と
            RAID0 はこのエイリアス)。
          
            MyISAM テーブルに対して
            RAID_TYPE=STRIPED
            と指定すると、データベースディレクトリに、00、01、02
            という RAID_CHUNKS
            サブディレクトリが MyISAM
            によって作成される。これらのディレクトリのそれぞれで、table_name.MYD
            が MyISAM
            によって作成される。データファイルへのデータの書き込み時、RAID
            ハンドラによって、最初の
            RAID_CHUNKSIZE *1024
            バイトが最初のファイルにマップされ、次の
            RAID_CHUNKSIZE *1024
            バイトが次のファイルにマップされる(以下同様)。
          
            UNION
            は、同一テーブルのコレクションを 1
            つのものとして使用する場合に指定する。これは、MERGE
            テーブルに対してのみ機能する。 See
            項7.2. 「MERGE テーブル」。
          
            現在のところ、MERGE
            テーブルにマップするテーブルに対する
            SELECT、UPDATE、DELETE
            の各権限が必要になる。
            マップ対象のテーブルはいずれも
            MERGE
            テーブルと同じデータベースに存在しなければならない。
          
            MERGE
            テーブルにデータを挿入するには、レコードの挿入先とするテーブルを
            INSERT_METHOD
            で指定する必要がある。
            INSERT_METHOD は
            MERGE
            テーブルのみに使用できるオプションである。See
            項7.2. 「MERGE テーブル」。このオプションは MySQL
            4.0.0 で導入された。
          
            作成されたテーブルでは、最初に
            PRIMARY
            キーが置かれ、続いてすべての
            UNIQUE
            キー、通常キーの順に配置される。そのため、MySQL
            オプティマイザで使用するキーを優先させることができ、また重複する
            UNIQUE
            キーをより迅速に検出できる。
          
            DATA DIRECTORY='directory' または
            INDEX DIRECTORY='directory'
            を使用することによって、ストレージエンジンのデータファイルとインデックスファイルの格納場所を指定できる。注意:
            この directory
            には、対象のディレクトリのフルパス(相対パスではなく)を指定する。
          
            これは、MySQL 4.0
            において、--skip-symlink
            オプションは指定しないときの
            MyISAM
            テーブルに対してのみ機能する。 See
            項5.6.1.2. 「Unix 上のテーブルに対するシンボリックリンクの使用」。
          
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

