Перемещение строк между таблицами MySQL - PullRequest
0 голосов
/ 05 января 2011

У меня есть две таблицы с одинаковой структурой, и обе содержат поле идентификатора auto_increment. Я хотел бы переместить строку из одной таблицы в другую.

Я знаю, что могу использовать:

INSERT INTO `new_table` VALUES (SELECT * FROM `old_table`)

Но тогда идентификатор в new_table получит идентификатор old_table. Поэтому я бы хотел скопировать все поля, кроме идентификатора, который должен получить значение auto_increment, равное new_table. Как я могу это сделать?

Спасибо!

Joel


EDIT:

Извините, я должен был упомянуть в своем первоначальном посте - я хотел бы сделать это, не выбирая каждое поле отдельно, в основном, поскольку у меня много полей ... Я ищу более общий подход.

Спасибо!

Ответы [ 4 ]

3 голосов
/ 05 января 2011
INSERT INTO `new_table` (name, surname, email) 
  (SELECT name, email, surname FROM `old_table`);

Будьте осторожны, когда разрешаете MySQL автоматически назначать новые идентификаторы в случае, если есть отношения из других таблиц, которые вам также необходимо переместить.

В таких случаях я перемещу все данные, добавив известное смещение к идентификатору, которое будет достаточно большим, чтобы избежать конфликтов идентификаторов в целевой таблице. Поскольку смещение известно, я смогу применить то же смещение при перемещении отношений (к целевой таблице) из других таблиц.

Редактирование на основе редактирования вопроса : я настоятельно рекомендую избегать "общего подхода". Может показаться педантичным необходимость писать все поля, но это единственный способ избежать ошибок и, конечно же, проблемы коллизий идентификаторов. Если вы хотите избежать ввода имен полей (поскольку это скучно и подвержено ошибкам), вы можете скопировать и вставить имена полей из show create table new_table.

1 голос
/ 05 января 2011

Не выбирайте идентификатор в этом случае:

INSERT INTO `new_table` (`field2`, `field3`) VALUES (SELECT `field2`, `field3` FROM `old_table`)
0 голосов
/ 05 января 2011

Укажите имена столбцов в списке INSERT и SELECT, исключая столбец ID

0 голосов
/ 05 января 2011
INSERT INTO `new_table` (COLS-I-WANT) 
VALUES (SELECT (OLD-COLS-I-WANT) FROM `old_table`)

Надеюсь, это поможет.

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