Руководство по SQL. Клонирование таблиц.

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

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

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

Пример:

Предположим, что у нас есть таблица developers, которая имеет следующую структуру:


mysql> SHOW CREATE TABLE developers;
+------------+-----------------------------------------+
| Table      | Create Table                                                                                                                                                                                                                                              |            |                    
+------------+-----------------------------------------+
| developers | CREATE TABLE `developers` (
  `ID` int(11) NOT NULL,
  `NAME` varchar(100) NOT NULL,
  `SPECIALTY` varchar(100) DEFAULT NULL,
  `EXPERIENCE` int(11) NOT NULL,
  `SALARY` int(11) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+------------+-----------------------------------------+
1 row in set (0.00 sec)

Теперь меняем имя таблицы и создаём точную копию исходной:


CREATE TABLE `developers_clone` (
   `ID` int(11) NOT NULL,
   `NAME` varchar(100) NOT NULL,
   `SPECIALTY` varchar(100) DEFAULT NULL,
   `EXPERIENCE` int(11) NOT NULL,
   `SALARY` int(11) DEFAULT NULL,
   PRIMARY KEY (`ID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

В результате мы получим талицу developers_clone, имеющую следующую структуру:


mysql> DESC developers_clone;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| ID         | int(11)      | NO   | PRI | NULL    |       |
| NAME       | varchar(100) | NO   |     | NULL    |       |
| SPECIALTY  | varchar(100) | YES  |     | NULL    |       |
| EXPERIENCE | int(11)      | NO   |     | NULL    |       |
| SALARY     | int(11)      | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

На этом мы заканчиваем изучение способа создания точной копии структуры таблицы.
В следующей статье мы рассмотрим под-запросы.