MySQL: как скопировать данные таблицы A в новую несуществующую таблицу B? - PullRequest
0 голосов
/ 12 февраля 2019

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

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

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

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

  • indexes
  • ограничения, такие как 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 голосов
/ 12 февраля 2019

Быстрый способ создания таблицы и копирования в нее данных в одном запросе SQL.

CREATE TABLE B AS SELECT * FROM A;

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...