MySQL How To Duplicate A Table – Fast Tips

Valerio Barbera

Recently I had to deal with some limitations of my database provider that doesn’t support table renaming. So I had to duplicate a table manually.

The database of my SaaS platform is hosted on Planetscale. The company provides a MySQL-compatible serverless database. Thanks to its serverless nature you can get the power of horizontal sharding, non-blocking schema changes, and many more powerful database features without the pain of implementing them. And a great developer experience.

From another perspective you have to deal with some constraint regarding schema changes. These limitations are needed to guarantee consistency in a sharded environment.

They made a lot of progress since I became a customer (almost two years ago), like the support for Foreign Key constraint: https://planetscale.com/docs/concepts/foreign-key-constraints

Rename a table

Inspector is a Laravel application. Using the Laravel migrations I could use the rename function to simply change the name of a table:

Schema::rename('from', 'to');

Planetscale doesn’t support table renaming natively. So I had to find a workaround to accomplish the task.

To be honest renaming a table is a quite rare operation. For me it was because of an overlap of names between “Projects” and “Applications” entities. I had to rename Projects -> Applications.

How to duplicate a table in MySQL

There are two ways to duplicate a table in MySQL.

Duplicate the table structure

You can duplicate only the table structure (columns, keys, indexes, etc) without data, using “CREATE TABLE … LIKE”:

CREATE TABLE applications LIKE projects;

The result is the creation of the applications table with the exact same structure of the original projects table, but WITH NO data.

To import data too you can run a second statement as “INSERT INTO … SELECT”:

INSERT INTO applications SELECT * FROM projects;

Take care running this statement on big tables because it can take a lot of time and server resources.

Duplicate only column definition

The second option is to duplicate only column definitions and import data in one statement using “CREATE TABLE … AS SELECT”:

CREATE TABLE applications AS SELECT * FROM projects;

The new applications table inherits only the basic column definitions from the projects table. It does not duplicate Foreign Key constraints, indexes, and auto_increment definitions.

This option could be usefult when you have the names of indexes and keys related to the table name. Changing the name of the table you have to replace the names of the constraints. You’d better not import them at all and do it all over again.

Resources

Database is always an hot topic for developers at any stage. You can find other technical resources on the blog. Here are the most popular articles on the topic:

New To Inspector? Monitor your application for free

Inspector is a Code Execution Monitoring tool specifically designed for software developers. You don’t need to install anything in the infrastructure, just install the composer package and you are ready to go.

Unlike other complex, all-in-one platforms, Inspector is super easy, and PHP friendly. You can try our Laravel or Symfony package.

If you are looking for effective automation, deep insights, and the ability to forward alerts and notifications into your messaging environment try Inspector for free. Register your account.

Or learn more on the website: https://inspector.dev

Related Posts

Streaming AI Agents in PHP: Introducing Neuron UI Streaming Protocol

While I was testing the new streaming channels for Neuron 4, I had an agent that reads files from a repository and answers questions about the code. In my terminal it worked perfectly. Then I moved it into a queue worker, connected Pusher to deliver the output to the browser, and the chat stopped in

Agent Skills in PHP: On-Demand Skills for Neuron AI Agents

Every Neuron agent starts with a tidy instructions() method: a few lines describing who the agent is, what it should do, and how it should talk. Then the agent meets real users, and that method starts to grow. A customer needs reports in a specific format, so the format goes into the prompt. The support

Neuron 4 is Here 🚀 Welcome To The PHP Agentic Era

For the first year of this project, every conversation I had about Neuron AI started with the same question: Can PHP really do this, or are you a few years behind Python and pretending otherwise? At some point in the months after Neuron 3.x, I noticed the question had stopped coming. Not because I got