2013-05-26 3 views
0

Я пытаюсь скопировать данные из таблицы posts в таблице A в столбце таблицы в базе данных B. База данных B имеет пустую таблицу сообщений, схема которой отличается от A.Повторяющаяся запись '1' для ключа 'PRIMARY' при миграции данных

Вот запрос, который я придумал:

INSERT INTO b.post (post_id, thread_id, user_id, username, post_date) SELECT 
        postid, threadid, userid, username, dateline FROM a.post; 

Но когда я запускаю выше команды я получаю от CLI MySQL,

ERROR 1062 (23000): Дублировать запись «1 'для ключа' PRIMARY '

Как это исправить?

P.S. база данных b предназначена для нового форума Xenforo и таблицы, на которую должен быть перенесен форум Vbulletin. Я не против переопределять данные по b, но, очевидно, я хотел бы сохранить схему цельной.

+0

Прежде чем делать что вам нужно, чтобы узнать _why_ вы» У меня эта ошибка. Имеет ли «a.post» этот дубликат? У «b.post» уже есть данные? У таблиц разные структуры? Если у них разные структуры, которые правильны? – Ben

+0

Бен, две таблицы имеют разные структуры. – supermario

+0

Можете ли вы также опубликовать DDL из двух таблиц? Является ли старый postid/threadid важным или он будет работать, чтобы дать всем сообщениям новые идентификаторы, начинающиеся с 1? –

ответ

0

Просто удалите ограничение первичного ключа.

ALTER TABLE tablename DROP PRIMARY KEY 

Edit

, но очевидно, что я хотел бы сохранить схему нетронутыми.

INSERT INTO b.post (post_id, thread_id, user_id, username, post_date) 
SELECT postid, threadid, userid, username, dateline FROM a.post 
group by postid; 

Обратите внимание: Некоторые записи будут отсутствовать как post_id является первичным ключом

Пожалуйста, прочтите о Primary Key

+2

Это ужасный совет ... Вы никогда не должны удалять ограничения, обеспечивающие целостность. – Ben

+0

Не могли бы вы подробно остановиться на этом? – supermario

+0

@Ben *** P.S. table b принадлежит к новому форуму. Поэтому я не против переопределять данные на нем. *** – Luv

Смежные вопросы