Копирование данных из одной таблицы в другую в MySQL

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам необходимо быстро клонировать все данные из таблицы existing_table в таблицу new_table при условии, что их структуры совпадают, можно использовать оператор INSERT INTO...SELECT:

SQL
Скопировать код
-- Клонируем данные!
INSERT INTO new_table
SELECT * FROM existing_table;

Если структура таблицы new_table отличается, потребуется указать конкретные колонки и соответствующие им данные:

SQL
Скопировать код
-- Указываем колонки!
INSERT INTO new_table(column1, column2)
SELECT column1, column2 FROM existing_table;
Кинга Идем в IT: пошаговый план для смены профессии

Работа с различными данными

Выборочное копирование данных – использование условия WHERE

Для копирования определенных строк используйте условие WHERE:

SQL
Скопировать код
-- Копируем только нужные данные!
INSERT INTO new_table
SELECT * FROM existing_table
WHERE condition;

Точное клонирование структуры – CREATE TABLE LIKE

Если нужно создать точный копию структуры таблицы без переноса данных:

SQL
Скопировать код
-- Создаем копию структуры!
CREATE TABLE new_table LIKE existing_table;

Копирование структуры и данных одновременно

Скопировать структуру и данные одновременно можно, выполнив следующий запрос:

SQL
Скопировать код
-- Эффективное клонирование!
CREATE TABLE new_table
SELECT * FROM existing_table;

Сложные структуры таблиц? Решение есть!

Соответствие колонок

При различающихся структурах таблиц следует соотнести названия колонок, чтобы данные правильно перенеслись:

SQL
Скопировать код
-- Копирование с учетом соответствия колонок!
INSERT INTO new_table(dest_col1, dest_col2)
SELECT source_col1, source_col2 FROM existing_table;

Учет целостности и оптимизация данных

При работе с данными всегда учитывайте внешние ключи, индексы и ограничения для поддержания целостности данных.

Визуализация

Для наглядного примера представим перенос автомобилей из одного гаража в другой:

Markdown
Скопировать код
🏠 (Исходный Гараж): [🚗, 🚕, 🚙, 🚌]
🏡 (Целевой Гараж): [ ]

Перемещаем все автомобили из исходного гаража (🏠) в целевой (🏡):

SQL
Скопировать код
-- Все машины переехали в новый гараж!
INSERT INTO 🏡 (Целевой Гараж)
SELECT * FROM 🏠 (Исходный Гараж);

После выполнения запроса получаем:

Markdown
Скопировать код
🏡 (Теперь Целевой Гараж): [🚗, 🚕, 🚙, 🚌]

Рекомендации для продвинутых пользователей

Трансформация данных в процессе копирования

Вы можете использовать SQL-функции, чтобы изменять данные в процессе копирования:

SQL
Скопировать код
-- Преобразуем данные на лету!
INSERT INTO new_table
SELECT CONCAT(first_name, ' ', last_name) as full_name FROM existing_table;

Работа с большими объемами данных

При передаче больших объемов данных рекомендуется использовать разбивку на части (chunking), пакетные вставки или временные таблицы.

Обращение со столбцами с автоинкрементом

Будьте особенно внимательны при работе со столбцами, имеющими автоинкремент, чтобы избежать конфликтов при переносе.

Полезные материалы

  1. MySQL :: MySQL 8.0 Справочное Руководство :: 13.1.20.4 CREATE TABLE ... SELECT Statement
  2. sqlite – Как просто и быстро мигрировать из SQLite3 в MySQL? – Stack Overflow
  3. Клонирование таблиц в MySQL – Database Journal
  4. TechOnTheNet – Объяснение команды INSERT INTO SELECT
  5. SQL Server – Копирование таблицы из одной базы данных в другую – SQL Authority