Как клонировать и копировать таблицы в MySql
При работе с базами данных может возникнуть ситуация, когда вам в MySQL нужно клонировать или продублировать существующую таблицу в новую из-за их сходства в столбцах и атрибутах, или же, для проведения тестов без затрагивания исходной таблицы.
Я столкнулся с подобной ситуацией, когда мне нужно было создать структурную копию одной таблицы, заполнить её данными, а потом заменить ею исходную. Подход с двумя идентичными таблицами применялся для того, чтобы для посетителей сайта вдруг не возникло ситуации, что таблица очищена в ожидании заполнения новыми данными. Потому, сначала мы создаем купию таблицы в MySql с каким-то временным именем, наполняем её данными, а затем переименовываем по имени первой. В результате чего, пользователь увидит обновленные данные, и не будет момента, когда эта таблица может быть пустой.
Поскольку существующая и новая таблицы очень похожи, моим быстрым решением будет клонирование существующей таблицы в SQL для создания новой таблицы на её основе. В SQL это сделать довольно просто, нужно выполнить всего пару команд, чтобы наилучшим образом удовлетворить свои потребности в клонировании таблицы.
В этой статье я покажу вам, как дублировать и клонировать существующие таблицы в SQL.
Простое клонирование
Первый метод называется Простое клонирование и, как следует из названия, он создает таблицу из другой таблицы без учета атрибутов столбцов и индексов.
CREATE TABLE new_table SELECT * FROM original_table;
Наприме, если у меня есть таблица users
, я могу легко создать другую таблицу adminUsers
, если мне не критично переносить атрибуты и индексы с таблицы users
.
Приведенная ниже команда SQL создаёт простую структурную копию таблицы пользователей:
CREATE TABLE adminUsers SELECT * FROM users;
Используйте это для быстрого клонирования любою таблицы, которая будет включать только структуру и данные исходной таблицы.
Поверхностное клонирование
Поверхностное клонирование в основном используется для создания копии существующей структуры данных таблицы и атрибутов столбца без копирования данных. Это только создаст пустую базу таблицы с идентичной структурой исходной таблицы.
CREATE TABLE new_table LIKE original_table;
Следующая команда создаст пустую базу таблицы на основе исходной таблице.
CREATE TABLE adminUsers LIKE users;
Используйте это, если вам нужна только структура данных и атрибуты столбцов исходной таблицы, без наполнения её данными из исходной.
Глубокое клонирование
Глубокое клонирование значительно отличается от простого клонирования и похоже на поверхностное клонирование, но с тем отличием, что копирует структуру таблицы вместе с данными исходной таблицы. Как следует из названия, она создаёт глубокую копию исходной таблицы.
Это означает, что новая таблица будет иметь все атрибуты каждого столбца, индексы и данные существующей таблицы. Это весьма полезно, если вы хотите сохранить индексы и атрибуты исходной таблицы.
Чтобы достичь этого, мы должны создать пустую таблицу на основе структуры и атрибутов исходной, затем выбрать данные из исходной таблицы и вставить их в новую таблицу.
CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;
Потому, создадим структуру новой таблицы по исходной и наполним её данными:
CREATE TABLE adminUsers LIKE users;
INSERT INTO adminUsers SELECT * FROM adminUsers;
Еще одна интересная вещь: допустим, вам не нужны все данные из существующей таблицы, а нужны только некоторые данные по определённым условиям, тогда уточнение вашего SELECT
-запроса - ваш лучший помощник.
Например, у нас есть пользователи с userType = "admin" в нашей таблице пользователей, и мы хотим копировать только этих пользователей в нашу новую таблицу, вы можете легко сделать это, выполнив запрос:
INSERT INTO adminUsers SELECT * FROM adminUsers where userType="admin";
Круто, правда? Надеюсь, что я ответил на вопрос о том, как в MySql клонировать таблицу и скопировать из неё данные в новую.