CREATE TABLE ... LIKE
を使用して、元のテーブルに定義されているカラム属性やインデックスなど、別のテーブルの定義に基づいて空のテーブルを作成します:
CREATE TABLE new_tbl LIKE orig_tbl;
このコピーは、元のテーブルと同じバージョンのテーブルストレージフォーマットを使用して作成されます。 元のテーブルに対する SELECT
権限が必要です。
LIKE
は、ビューに対してではなく、ベーステーブルに対してのみ機能します。
LOCK TABLES
ステートメントが有効な間は、CREATE TABLE
または CREATE TABLE ... LIKE
を実行できません。
CREATE TABLE ... LIKE
は、CREATE TABLE
と同じチェックを行います。 つまり、現在の SQL モードが元のテーブルの作成時に有効なモードと異なる場合、テーブル定義は新しいモードでは無効とみなされ、ステートメントが失敗する可能性があります。
CREATE TABLE ... LIKE
の場合、宛先テーブルには元のテーブルから生成されたカラム情報が保持されます。
CREATE TABLE ... LIKE
の場合、宛先テーブルには元のテーブルの式のデフォルト値が保持されます。
CREATE TABLE ... LIKE
の場合、宛先テーブルでは、すべての制約名が生成されることを除き、元のテーブルの CHECK
制約が保持されます。
CREATE TABLE ... LIKE
は、元のテーブルや、すべての外部キー定義に対して指定されたどの DATA DIRECTORY
または INDEX DIRECTORY
テーブルオプションも保持しません。
元のテーブルが TEMPORARY
テーブルである場合、CREATE TABLE ... LIKE
は TEMPORARY
を保持しません。 TEMPORARY
宛先テーブルを作成するには、CREATE TEMPORARY TABLE ... LIKE
を使用します。
mysql
テーブルスペース、InnoDB
システムテーブルスペース (innodb_system
) または一般テーブルスペースで作成されたテーブルには、テーブルが存在するテーブルスペースを定義する TABLESPACE
属性がテーブル定義に含まれます。 一時的な回帰のため、CREATE TABLE ... LIKE
は TABLESPACE
属性を保持し、innodb_file_per_table
の設定に関係なく、定義されたテーブルスペースにテーブルを作成します。 このようなテーブルの定義に基づいて空のテーブルを作成するときに TABLESPACE
属性を回避するには、かわりに次の構文を使用します:
CREATE TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
CREATE TABLE ... LIKE
操作では、すべての ENGINE_ATTRIBUTE
および SECONDARY_ENGINE_ATTRIBUTE
の値が新しいテーブルに適用されます。