converting 'describe' into 'create table' in MySQL?
Converting MySQL DESCRIBE Output to CREATE TABLE Statements

Learn how to transform the output of MySQL's DESCRIBE
or SHOW CREATE TABLE
commands into executable CREATE TABLE
statements, enabling easy table recreation or migration.
When working with MySQL databases, you often need to replicate table structures, migrate schemas, or simply understand the exact definition of an existing table. The DESCRIBE
command provides a quick overview of a table's columns, but it doesn't give you the full CREATE TABLE
statement needed for direct recreation. This article will guide you through various methods to obtain a complete CREATE TABLE
statement from an existing table, focusing on practical approaches for different scenarios.
Understanding MySQL's Schema Information Commands
MySQL offers several commands to inspect table structures. While DESCRIBE table_name;
(or its shorthand DESC table_name;
) is useful for a quick glance at column names, data types, and nullability, it omits crucial details like primary keys, foreign keys, indexes, default values, auto-increment properties, and storage engine specifics. For a comprehensive definition, you need a command that provides the exact SQL statement used to create the table.
DESCRIBE my_table;
Example of using the DESCRIBE command
The 'SHOW CREATE TABLE' Command: Your Best Friend
The most direct and recommended way to get the CREATE TABLE
statement for an existing table is using the SHOW CREATE TABLE
command. This command returns a result set with two columns: Table
and Create Table
. The Create Table
column contains the full, executable SQL statement, including all constraints, indexes, and table options.
SHOW CREATE TABLE my_table;
Using SHOW CREATE TABLE to get the full definition
SHOW CREATE TABLE
, the output often includes backticks (`) around table and column names. This is standard practice in MySQL to handle names that might conflict with reserved keywords or contain special characters. It's generally safe to keep them.Capturing and Using the Output
Once you execute SHOW CREATE TABLE
, the output is typically displayed in your MySQL client. You can copy this output directly. If you're working from the command line, you might want to redirect the output to a file for easier manipulation or execution later.
mysql -u your_user -p your_database -e "SHOW CREATE TABLE my_table;" > create_table_my_table.sql
Redirecting SHOW CREATE TABLE output to a file from the command line
The generated create_table_my_table.sql
file will contain the CREATE TABLE
statement, which you can then use to recreate the table in another database or for version control.
CREATE TABLE
statement without IF NOT EXISTS
will result in an error. Consider adding DROP TABLE IF EXISTS my_table;
before the CREATE TABLE
statement if you intend to replace an existing table.Advanced Scenarios: Programmatic Access and Schema Extraction
For more complex scenarios, such as automating schema migrations or generating CREATE TABLE
statements for multiple tables, you might need programmatic access. MySQL's information_schema
database contains metadata about all databases, tables, columns, and other objects. While you could construct a CREATE TABLE
statement by querying information_schema.COLUMNS
, information_schema.KEY_COLUMN_USAGE
, etc., it's significantly more complex and error-prone than simply using SHOW CREATE TABLE
.

Decision flow for obtaining CREATE TABLE statements
Tools like mysqldump
are also excellent for extracting schema definitions, especially for entire databases or multiple tables. mysqldump
can generate SQL files containing both CREATE TABLE
statements and data, or just the schema.
mysqldump -u your_user -p --no-data your_database my_table > my_table_schema.sql
Using mysqldump to extract only the schema for a specific table
--no-data
option with mysqldump
ensures that only the table structure (schema) is dumped, without any row data. This is ideal for schema replication.