MySQL 8.0 リファレンスマニュアル


13.1.20.3 CREATE TABLE ... LIKE ステートメント

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 ... LIKETEMPORARY を保持しません。 TEMPORARY 宛先テーブルを作成するには、CREATE TEMPORARY TABLE ... LIKE を使用します。

mysql テーブルスペース、InnoDB システムテーブルスペース (innodb_system) または一般テーブルスペースで作成されたテーブルには、テーブルが存在するテーブルスペースを定義する TABLESPACE 属性がテーブル定義に含まれます。 一時的な回帰のため、CREATE TABLE ... LIKETABLESPACE 属性を保持し、innodb_file_per_table の設定に関係なく、定義されたテーブルスペースにテーブルを作成します。 このようなテーブルの定義に基づいて空のテーブルを作成するときに TABLESPACE 属性を回避するには、かわりに次の構文を使用します:

CREATE TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;

CREATE TABLE ... LIKE 操作では、すべての ENGINE_ATTRIBUTE および SECONDARY_ENGINE_ATTRIBUTE の値が新しいテーブルに適用されます。


関連キーワード:  ステートメント, CREATE, TABLE, テーブル, DROP, 定義, サブクエリー, FUNCTION, SLAVE, 関数