#### 13.1.20.3 CREATE TABLE ... LIKE Statement

[]()[]()

 Use `CREATE TABLE ... LIKE` to create an empty table based on the definition of another table, including any column attributes and indexes defined in the original table:

```
CREATE TABLE new_tbl LIKE orig_tbl;
```

 The copy is created using the same version of the table storage format as the original table. The [`SELECT`](privileges-provided.html#priv_select) privilege is required on the original table.

`LIKE` works only for base tables, not for views.

Important

 You cannot execute `CREATE TABLE` or `CREATE TABLE ... LIKE` while a [`LOCK TABLES`](lock-tables.html) statement is in effect.

[`CREATE TABLE ... LIKE`](create-table.html) makes the same checks as [`CREATE TABLE`](create-table.html). This means that if the current SQL mode is different from the mode in effect when the original table was created, the table definition might be considered invalid for the new mode and cause the statement to fail.

 For `CREATE TABLE ... LIKE`, the destination table preserves generated column information from the original table.

 For `CREATE TABLE ... LIKE`, the destination table preserves expression default values from the original table.

 For `CREATE TABLE ... LIKE`, the destination table preserves `CHECK` constraints from the original table, except that all the constraint names are generated.

`CREATE TABLE ... LIKE` does not preserve any `DATA DIRECTORY` or `INDEX DIRECTORY` table options that were specified for the original table, or any foreign key definitions.

 If the original table is a `TEMPORARY` table, `CREATE TABLE ... LIKE` does not preserve `TEMPORARY`. To create a `TEMPORARY` destination table, use `CREATE TEMPORARY TABLE ... LIKE`.

 Tables created in the `mysql` tablespace, the `InnoDB` system tablespace (`innodb_system`), or general tablespaces include a `TABLESPACE` attribute in the table definition, which defines the tablespace where the table resides. Due to a temporary regression, `CREATE TABLE ... LIKE` preserves the `TABLESPACE` attribute and creates the table in the defined tablespace regardless of the [`innodb_file_per_table`](innodb-parameters.html#sysvar_innodb_file_per_table) setting. To avoid the `TABLESPACE` attribute when creating an empty table based on the definition of such a table, use this syntax instead:

```
CREATE TABLE new_tbl SELECT * FROM orig_tbl LIMIT 0;
```

[`CREATE TABLE ... LIKE`](create-table-like.html) operations apply all `ENGINE_ATTRIBUTE` and `SECONDARY_ENGINE_ATTRIBUTE` values to the new table.

