2010-07-19 3 views
433

Как скопировать/клонировать/дублировать данные, структуру и индексы таблицы MySQL на новую?Дублирование таблицы, индексов и данных MySQL

Это то, что я нашел до сих пор.

Это будет копировать данные и структуру, но не индексирует:

create table {new_table} select * from {old_table}; 

Это будет копировать структуру и индексы, но не данные:

create table {new_table} like {old_table}; 
+2

возможно дубликат [запустить MySQL создать таблицу с помощью выбора другого и автоматически копируются индексы] (http://stackoverflow.com/questions/2415855/run-mysql-create-table-by-select- другой-и-copy-the-indexes-автоматически) –

ответ

970

Для копирования с индексами и триггеры выполняют эти 2 запроса:

CREATE TABLE newtable LIKE oldtable; 
INSERT newtable SELECT * FROM oldtable; 

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

CREATE TABLE tbl_new AS SELECT * FROM tbl_old; 

Я спросил об этом раньше:

Copy a MySQL table including indexes

+24

В этой ситуации вы должны пометить новый вопрос как дубликат, а не копировать ответ. Однако теперь этот вопрос получил гораздо больше внимания (и лучше написан и легче найти), поэтому я отметил, что ваш старый вопрос был обманом. – TRiG

+5

Стоит отметить, что внешние ключи, указывающие на oldtable, должны быть скопированы в newtable (если вы заменяете oldtable) – George

+2

Это работает для больших таблиц (миллионы записей)? .. Я спрашиваю, потому что я не знаю, как это 'select *' будет выполняться в огромных таблицах. – fguillen

38

Помимо вышеуказанного решения, вы можете использовать AS сделать это в одной строке.

CREATE TABLE tbl_new AS SELECT * FROM tbl_old; 
+21

Это не будет копировать индексы и триггеры, так как результат SELECT является (неназванной) временной таблицей и не переносит метаданные исходной таблицы. Подумайте, будете ли вы использовать функции, это не имеет смысла. – chx

+1

Я искал резервную копию таблицы структуры и перемещал только данные, тем самым снижая индексы/ограничения/и т. Д. поэтому я мог бы воссоздать их. Этот ответ был потрясающим, поскольку я видел, как Google отправил меня сюда. – Ellesedil

+0

Это именно то, что он уже упоминает в вопросе: ** create table {new_table} select * from {old_table}; '** не ответ и не предоставляет никакой новой информации. – billynoah

-3

ДЛЯ MySQL

CREATE TABLE newtable LIKE oldtable ; 
INSERT newtable SELECT * FROM oldtable ; 

ДЛЯ MSSQL Использование MyDatabase:

Select * into newCustomersTable from oldCustomersTable; 

Этот SQL используется для копирования таблиц, здесь содержание oldCustomersTable будет скопирован в newCustomersTable.
Убедитесь, что newCustomersTableне есть в базе данных.

+3

Ошибка ошибок SQL Ошибка (3172): Необъявленная переменная: 'newCustomerTable' – mikewasmike

+0

Вы должны что-то делать неправильно. Поскольку это будет работать на 100%. Читайте перед тем, как дать отрицательный голос. Контент для вас. http://www.w3schools.com/sql/sql_select_into.asp – Krishneil

+1

Обратите внимание, что речь идет о MySQL. Некоторые синтаксисы SQL могут не поддерживаться. – mikewasmike

1

я нашел ту же ситуацию, и подход, который я взял был следующим: 1. Выполните SHOW CREATE TABLE: Это даст вам Создание таблицы синтаксиса для таблицы, которые вы хотите клонировать 2. Запустите CREATE TABLE запрос, изменив имя таблицы для клонирования таблицы.

Это создаст точную копию таблицы, которую вы хотите клонировать вместе с индексами. Единственное, что вам нужно, это переименовать индексы (если требуется).

2

MySQL Путь

CREATE TABLE recipes_new LIKE production.recipes; INSERT recipes_new SELECT * FROM production.recipes; 
1

После того, как попробовал раствора выше. Я придумал свой собственный путь.

Мое решение немного вручную и нуждается в СУБД.

Первый экспорт данных.

второй открытый экспорт данных.

третий заменить имя старой таблицы на новое имя таблицы.

четвёртых изменения все имя триггер в данных (я использую MySQL и показать ошибку, когда я не меняю имя триггера)

пятых импортировать отредактированные данные SQL в базу данных.

2

Перейти к PHPMYADMIN и выберите исходную таблицу, затем выберите «Операций» вкладки в «копирование таблицы (database.table)» области выберите базу данных, где вы хотите скопировать и добавить имя ваш новый стол.

copy table - phyMyAdmin Screenshot

Смежные вопросы