Я хочу скопировать таблицу из одной базы данных и вставить в другую таблицу базы данных

96

Я хочу скопировать схему таблицы, а также данные из этой таблицы в другую таблицу базы данных в другой базе данных на работающем сервере. Как я мог это сделать?

user1031092
источник
использовать два соединения с базой данных и читать структуру таблицы из одного и выполнять этот запрос в другом
Дау
Эти базы данных находятся в разных экземплярах mysql или в одном? Различные экземпляры могут быть настроены с репликацией, если это непрерывный процесс.
Ник
@Nick мои базы данных находятся на разных экземплярах mysql. Не могли бы вы объяснить, как это скопировать?
johk95

Ответы:

218

Если вы хотите скопировать таблицу из одной базы данных в другую, вы можете просто сделать, как показано ниже.

CREATE TABLE db2.table LIKE db1.table;
INSERT INTO db2.table SELECT * FROM db1.table;

источник
2
Отличное решение, если таблица не имеет ограничений внешнего ключа. Я использовал это для создания копии всей базы данных, а не только одной таблицы. Для этого я бы рекомендовал использовать команду mysqldump.
Thorne51
MySQL теперь может хранить данные таблицы в отдельных файлах (и файлы frm тоже находятся в таблице). Этот подход, несомненно, сработает, но с огромными базами данных он медленный. Может быть, есть другой способ?
Alex Kovshovik 08
1
Это работает, только если базы данных находятся на одном сервере.
zgr024
10

или просто CREATE TABLE db2.table SELECT * FROM db1.table в MySQL 5

HukeLau_DABA
источник
4
Это не копирует такие вещи, как index. Он просто создает таблицу на основе набора кортежей. Вы, вероятно, не захотите этого делать.
BenMQ
Да, этот запрос не копирует indexe
XxXk5XxX
4

В BASH вы можете:

mysqldump database_1 table | mysql database_2
Биллиноа
источник
2

СОЗДАТЬ ТАБЛИЦУ db2.table_new как SELECT * FROM db1.table_old

Раши Гоял
источник
2

Если вы просто хотите скопировать структуру, просто используйте

CREATE TABLE Db_Name.table1 LIKE DbName.table2;

Ps> что не будет копировать схему и данные

Хемант Шори
источник
1

просто используйте -

СОЗДАТЬ ТАБЛИЦУ DB2.newtablename SELECT * FROM DB1.existingtablename;

Вишну Подробнее
источник
0

В командной строке:

mysqldump -h localhost -u username -ppassword [SCHEMA] --tables [TABLE] | mysql -h otherhost -u username -ppassword [SCHEMA2]

Это скопирует таблицу внутри SCHEMA на локальном хосте в SCHEMA2 на другом хосте.

localhost и otherhost - это просто имя хоста и могут быть одинаковыми или разными.

DrGeneral
источник