MySQL: как скопировать данные таблицы A в новую несуществующую таблицу B?

0

Обновление: в подобных вопросах в SO таблица, в которую должны были быть скопированы данные, уже была создана в отличие от этого случая.

У меня есть таблица A с несколькими записями, и я хочу, чтобы ее данные были скопированы в другую несуществующую таблицу B. Поиск какого-либо запроса.

Теги:

2 ответа

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

Мне не нравится использовать CREATE TABLE B AS SELECT * FROM A потому что это не захватывает:

  • индексы
  • такие ограничения, как PRIMARY KEY, UNIQUE KEY или FOREIGN KEY
  • параметры таблицы, такие как ROW_FORMAT

По крайней мере, он фиксирует параметры на уровне столбца, такие как NOT NULL и DEFAULT.

mysql> create table A ( i int primary key, x int default 123, unique key (x)) row_format=compressed;

mysql> create table b1 as select * from A;

mysql> show create table b1\G
*************************** 1. row ***************************
       Table: b1
Create Table: CREATE TABLE 'b1' (
  'i' int(11) NOT NULL,
  'x' int(11) DEFAULT '123'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

Он получил параметры таблицы ENGINE и DEFAULT CHARSET только потому, что это глобальные значения по умолчанию. Если бы у меня был выбор по умолчанию для любого из этих параметров таблицы, они были бы потеряны в таблице клонов.

Попробуйте сделать это в два этапа, например:

CREATE TABLE B LIKE A;
INSERT INTO B SELECT * FROM A;

Таблица B будет иметь действительно идентичное определение с таблицей A, включая индексы, ограничения и параметры таблицы.

mysql> create table b2 like A;

mysql> show create table b2\G
*************************** 1. row ***************************
       Table: b2
Create Table: CREATE TABLE 'b2' (
  'i' int(11) NOT NULL,
  'x' int(11) DEFAULT '123',
  PRIMARY KEY ('i'),
  UNIQUE KEY 'x' ('x')
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPRESSED
0

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

CREATE TABLE B AS SELECT * FROM A;

Рабочий пример:

http://sqlfiddle.com/#!9/da26e1/1

Ещё вопросы

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