Sometimes you may need to copy table in MySQL. There are many different ways to copy table in MySQL. Here are the steps to copy table in MySQL. You can use them to copy table to another table, copy table from one database to another, copy table structure, copy table with data, copy table structure with index, or copy table from one server to another.
How To Copy Table in MySQL
Here’s how to copy table in MySQL. There are different use cases to copy table in MySQL. We will look at each of them in detail.
MySQL Copy data from one table to a new table
Typically, you need to copy table in MySQL to a new table. In this case, you need to use CREATE TABLE and SELECT statement as shown below
CREATE TABLE new_table SELECT column, column2, column3 FROM existing_table;
In the above query, you need to specify names of existing table along with the columns that you want to copy, and also new table name. MySQL will populate your new table with the result of your SELECT statement.
Let’s say you have an existing table product_list
mysql> select * from product_list; +------------+--------------------+-------+ | product_id | product_name | price | +------------+--------------------+-------+ | 1 | iPhone 11 | 400 | | 2 | Samsung Galaxy A50 | 250 | +------------+--------------------+-------+
Here’s the SQL query to copy product_list table into new table called new_product_list
mysql> create table new_product_list select * from product_list; mysql> select * from new_product_list; +------------+--------------------+-------+ | product_id | product_name | price | +------------+--------------------+-------+ | 1 | iPhone 11 | 400 | | 2 | Samsung Galaxy A50 | 250 | +------------+--------------------+-------+
Please note that the new table will be created only if it doesn’t exist. Otherwise, you will get an error. To avoid getting an error when you duplicate table in MySQL, you can use IF NOT EXIST clause in CREATE TABLE statement, as shown below.
mysql> create table if not exist new_product_list select * from product_list;
Bonus Read : How to Add NOT NULL constraint in MySQL
If you want to copy only partial data from one table to new table, that is some rows but not all, you can use WHERE condition in your SELECT statement as shown
CREATE TABLE new_table SELECT column1, column2, column3 FROM existing_table WHERE conditions;
Here’s the SQL query to copy partial data from product_list table into new table called new_products2
mysql> create table new_products2 select * from product_list where product_id=1; mysql> select * from new_products2; +------------+--------------+-------+ | product_id | product_name | price | +------------+--------------+-------+ | 1 | iPhone 11 | 400 | +------------+--------------+-------+
Bonus Read : How to Add Default Constraint in MySQL
MySQL Copy Table Structure to New Table
The above SQL queries only copy table and data. They will not copy table objects such as primary key, indexes, constraints, triggers. To copy table structure and data, you need to use CREATE TABLE statement with LIKE keyword, as shown below
CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;
Let’s say you have an orders table with primary key (id)
mysql> describe orders; +--------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | product_name | varchar(255) | NO | | NULL | | | order_date | date | YES | | NULL | | | price | int(11) | NO | | NULL | | | description | text | YES | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | | +--------------+--------------+------+-----+-------------------+----------------+
and you want to copy structure of orders to new_orders table. Here’s the SQL query to copy table structure to new table.
mysql> create table new_orders like orders; mysql> describe new_orders; +--------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+--------------+------+-----+-------------------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | product_name | varchar(255) | NO | | NULL | | | order_date | date | YES | | NULL | | | price | int(11) | NO | | NULL | | | description | text | YES | | NULL | | | created_at | timestamp | NO | | CURRENT_TIMESTAMP | | +--------------+--------------+------+-----+-------------------+----------------+
As you can see, the new_orders table also has a primary key field id. The above statement will only copy table structure but not data. You need to separately copy data, as show in next section.
Bonus Read : MySQL Select Top N Rows Per Group
MySQL Copy Data from one table to existing table
The above statement will create new table with structure of old table, but it will be an empty table. Then you need to use INSERT statement to copy data from old table to new table.
INSERT new_table SELECT * FROM existing_table;
Here’s the SQL query to copy data from orders to existing table new_orders
mysql> insert new_orders select * from orders; mysql> select * from orders; +----+--------------+------------+-------+-------------+---------------------+ | id | product_name | order_date | price | description | created_at | +----+--------------+------------+-------+-------------+---------------------+ | 1 | A | 2020-07-01 | 150 | New product | 2020-06-01 00:00:00 | | 2 | B | 2020-07-01 | 235 | Old product | 2020-06-15 00:00:00 | +----+--------------+------------+-------+-------------+---------------------+
Bonus Read : MySQL Copy Database
MySQL Copy Table from One database to Another
If you want to duplicate table in MySQL from database to another, then just include the database names in your table names while using the above SQL queries, as shown below in bold
CREATE TABLE destination_db.new_table LIKE source_db.existing_table; INSERT destination_db.new_table SELECT * FROM source_db.existing_table;
The first SQL statement above will duplicate table structure in MySQL from source database (e.g source_db) to another (e.g destination_db). The second statement will copy data from one table to another.
Replace source_db and destination_db in above queries with source and destination databases respectively.
Hopefully, this article will help you copy table in MySQL. Please be careful when you copy table in MySQL, with large number of records, as it can take a lot of time & resources.
Ubiq makes it easy to visualize data in minutes, and monitor in real-time dashboards. Try it Today!
Sreeram Sreenivasan is the Founder of Ubiq. He has helped many Fortune 500 companies in the areas of BI & software development.