Как клонировать и копировать таблицы в MySql

При работе с базами данных может возникнуть ситуация, когда вам в MySQL нужно клонировать или продублировать существующую таблицу в новую из-за их сходства в столбцах и атрибутах, или же, для проведения тестов без затрагивания исходной таблицы.
Я столкнулся с подобной ситуацией, когда мне нужно было создать структурную копию одной таблицы, заполнить её данными, а потом заменить ею исходную. Подход с двумя идентичными таблицами применялся для того, чтобы для посетителей сайта вдруг не возникло ситуации, что таблица очищена в ожидании заполнения новыми данными. Потому, сначала мы создаем купию таблицы в MySql с каким-то временным именем, наполняем её данными, а затем переименовываем по имени первой. В результате чего, пользователь увидит обновленные данные, и не будет момента, когда эта таблица может быть пустой.
Поскольку существующая и новая таблицы очень похожи, моим быстрым решением будет клонирование существующей таблицы в SQL для создания новой таблицы на её основе. В SQL это сделать довольно просто, нужно выполнить всего пару команд, чтобы наилучшим образом удовлетворить свои потребности в клонировании таблицы.
В этой статье я покажу вам, как дублировать и клонировать существующие таблицы в SQL.
Простое клонирование
Первый метод называется Простое клонирование и, как следует из названия, он создает таблицу из другой таблицы без учета атрибутов столбцов и индексов.
Наприме, если у меня есть таблица users , я могу легко создать другую таблицу adminUsers , если мне не критично переносить атрибуты и индексы с таблицы users .
Приведенная ниже команда SQL создаёт простую структурную копию таблицы пользователей:
Используйте это для быстрого клонирования любою таблицы, которая будет включать только структуру и данные исходной таблицы.
Поверхностное клонирование
Поверхностное клонирование в основном используется для создания копии существующей структуры данных таблицы и атрибутов столбца без копирования данных. Это только создаст пустую базу таблицы с идентичной структурой исходной таблицы.
Следующая команда создаст пустую базу таблицы на основе исходной таблице.
Используйте это, если вам нужна только структура данных и атрибуты столбцов исходной таблицы, без наполнения её данными из исходной.
Глубокое клонирование
Глубокое клонирование значительно отличается от простого клонирования и похоже на поверхностное клонирование, но с тем отличием, что копирует структуру таблицы вместе с данными исходной таблицы. Как следует из названия, она создаёт глубокую копию исходной таблицы.
Это означает, что новая таблица будет иметь все атрибуты каждого столбца, индексы и данные существующей таблицы. Это весьма полезно, если вы хотите сохранить индексы и атрибуты исходной таблицы.
Чтобы достичь этого, мы должны создать пустую таблицу на основе структуры и атрибутов исходной, затем выбрать данные из исходной таблицы и вставить их в новую таблицу.
Потому, создадим структуру новой таблицы по исходной и наполним её данными:
Еще одна интересная вещь: допустим, вам не нужны все данные из существующей таблицы, а нужны только некоторые данные по определённым условиям, тогда уточнение вашего SELECT -запроса — ваш лучший помощник.
Например, у нас есть пользователи с userType = "admin" в нашей таблице пользователей, и мы хотим копировать только этих пользователей в нашу новую таблицу, вы можете легко сделать это, выполнив запрос:
Круто, правда? Надеюсь, что я ответил на вопрос о том, как в MySql клонировать таблицу и скопировать из неё данные в новую.
Клонирование таблиц в MySQL
Необходимо создать копию таблицы со всеми данными или же только копию структуры?Воспользуемся стандартными запросами MySQL для этих нужд.
Задача: нужно создать новую пользовательскую таблицу со структурой, аналогичной существующей таблице. Эта обычная ситуация, когда нужно просто скопировать структуру и ключи некоторой таблицы, без копирования данных. Выполняем запрос:
Задача: нужно склонировать таблицы базы данных со всеми данными
В случае, если вам нужно клонировать всю таблицу вместе с данными, то ниже приведенный метод может помочь вам.
Copy table structure into new table
Is there a way to copy the structure of a table into a new table, without data, including all keys and constraints?
6 Answers 6
For a simple schema copy use the like clause.
![]()
Well, the closest you can get with SQL is:
But it will not copy everything. The most important things that are missing are FOREIGN KEYs. Also — triggers are also not copied. Not sure about other things.
Another way is to dump the table structure, change it’s name in dump, and load it again:
But beware, that such simplistic sed will also change old to new in other places (for example if you have in your table column named «is_scolded» it will become «is_scnewed»).
The question really is rather: why do you need it — because for various purposes, I would use different techniques.
Copy complete structure of a table
Using some methods, when you create a copy of a table you lose indexes, PK, FK, etc. For example in SQL Server I can say:
This is just a simple copy of the table; all of the indexes / constraints are missing. How can I copy a table structure (without using a backup)?
I am primarily looking to do this manually, but if that’s not possible I’ll accept any solution.
![]()
7 Answers 7
You can script a table relatively easy using the UI of course:

This will output a CREATE TABLE script and you only have to search and replace the old name with the new name (and verify that an object with the new name doesn’t already exist).
But if you’re trying to automate this (e.g. generate the create table script in code), it is a little more cumbersome. The above scripting option doesn’t just pull the entire CREATE TABLE DDL from a single location in the metadata; it does a whole bunch of magic behind the scenes in the code to generate the eventual CREATE TABLE script (you can use Profiler to see where it gets its data, but you can’t see how it assembles it). I suggested an option for this:
However this was met with very few votes and was quickly shot down by Microsoft. You may find it much more worthwhile to use a 3rd party tool for generating schema (I’ve blogged about this).
In SQL Server 2012 there are new metadata functions that allow you to get much closer than the work you have to do in 2005, 2008 and 2008 R2, piecing together column information from the metadata (which has a lot of caveats, for example if it’s decimal you have to add the precision/scale, if [n[var[char]] you have to add the length specification, if n[var]char you have to cut the max_length in half, if it is a MAX you have to change -1 to MAX, etc etc). In SQL Server 2012 this part is a little easier: