MySQLi - клонировать таблицы

Может возникнуть ситуация, когда вам понадобится точная копия таблицы и CREATE TABLE ... SELECT не подходит для ваших целей, потому что копия должна включать те же индексы, значения по умолчанию и так далее.

Вы можете справиться с этой ситуацией, выполнив следующие шаги -

  • Используйте SHOW CREATE TABLE, чтобы получить оператор CREATE TABLE, который определяет структуру исходной таблицы, индексы и все остальное.

  • Измените оператор, чтобы изменить имя таблицы на имя таблицы клонирования, и выполните оператор. Таким образом, у вас будет точная таблица клонирования.

  • При желании, если вам нужно скопировать и содержимое таблицы, также выполните оператор INSERT INTO ... SELECT.

пример

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

Шаг 1

Получите полную структуру о таблице.

mysql> SHOW CREATE TABLE tutorials_inf \G;
*************************** 1. row ***************************
       Table: tutorials_inf
Create Table: CREATE TABLE `tutorials_inf` (
   `id` int(11) NOT NULL,
   `name` varchar(20) NOT NULL,
   PRIMARY KEY (`id`),
   UNIQUE KEY `AUTHOR_INDEX` (`name`),
   UNIQUE KEY `NAME_INDEX` (`name`),
   KEY `id` (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = latin1
1 row in set (0.05 sec)

ERROR: No query specified

Шаг 2

Переименуйте эту таблицу и создайте другую таблицу.

mysql> CREATE TABLE tutorials_clone(
   -> id int(11) NOT NULL,
   -> name varchar(20) NOT NULL,
   -> PRIMARY KEY (id),
   > UNIQUE KEY AUTHOR_INDEX (name),
   -> UNIQUE KEY NAME_INDEX (name),
   ->  KEY id (id));
Query OK, 0 rows affected (1.80 sec)

Шаг 3

После выполнения шага 2 вы создадите таблицу клонирования в своей базе данных. Если вы хотите скопировать данные из старой таблицы, вы можете сделать это с помощью оператора INSERT INTO ... SELECT.

mysql> INSERT INTO tutorials_clone(id,name) SELECT id,name from tutorials_inf;
Query OK, 4 rows affected (0.19 sec)
Records: 4  Duplicates: 0  Warnings: 0

Наконец, у вас будет точная таблица клонов, как вы хотели.