Дублирование таблицы, индексов и данных MySQL

415

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

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

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

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

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

create table {new_table} like {old_table};
Теги:

7 ответов

893
Лучший ответ

Чтобы скопировать с помощью индексов и триггеров, выполните следующие 2 запроса:

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

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

CREATE TABLE tbl_new AS SELECT * FROM tbl_old;

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

Скопировать таблицу MySQL, включая индексы

  • 33
    В этой ситуации вы должны пометить новый вопрос как дубликат, а не копировать ответ. Однако, теперь этот вопрос получил гораздо больше внимания (и его лучше написать и легче найти), поэтому я пометил ваш старый вопрос как обман.
  • 6
    Стоит отметить, что внешние ключи, указывающие на oldtable, необходимо будет скопировать в newtable (если вы заменяете oldtable)
Показать ещё 13 комментариев
35

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

CREATE TABLE tbl_new AS SELECT * FROM tbl_old;
  • 28
    Это не будет копировать индексы и триггеры, поскольку результат SELECT является (неназванной) временной таблицей и не «переносит» метаданные исходной таблицы. Подумайте, если вы будете использовать функции, это не имеет смысла.
  • 1
    Я искал резервную копию таблицы структуры и перемещал только данные, таким образом отбрасывая индексы / ограничения / и т.д. чтобы я мог их воссоздать. Этот ответ был потрясающим в том, что касается того, как Google отправил меня сюда.
Показать ещё 1 комментарий
0

Перейдите в phpMyAdmin и выберите исходную таблицу, затем выберите вкладку Операции "в таблице Копировать в таблицу (database.table) выберите базу данных, в которую вы хотите скопировать, и добавьте имя для своей новой таблицы. таблица копирования - скриншот phyMyAdmin

  • 0
    @AaronJSpetner Этот ответ по-прежнему полезен для других пользователей, которые приходят на этот вопрос и могут использовать PHPMyAdmin для решения проблемы.
0

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

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

Сначала экспортируйте данные.

затем откройте данные экспорта.

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

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

пятый импортирует ваши отредактированные данные sql в базу данных.

0

MySQL Way

CREATE TABLE recipes_new LIKE production.recipes; INSERT recipes_new SELECT * FROM production.recipes;
  • 0
    Это должен был быть принятый ответ. Поскольку это копирует все индексы, включая первичный ключ и auto_increment
0

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

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

-4

ДЛЯ 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'
  • 0
    Вы должны делать что-то не так. Как это будет работать на 100%. Прочитайте, прежде чем дать отрицательный голос. Содержание ссылки для вас. w3schools.com/sql/sql_select_into.asp
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню