2016-07-04 9 views
0

table1: bo_indexable_attributeдубликата записи для ключа первичного в MySQL

id   version   mcs   name  search_id 
285   3    13   name1  16 
286   3    13   name2  16 
287   3    13   name3  16 

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

CREATE TEMPORARY TABLE bo_scenario_indexable_attribute_temp (SELECT * FROM bo_scenario_indexable_attribute WHERE mcs = @sales); 

UPDATE bo_scenario_indexable_attribute_temp SET mcs = @sales_master; 

INSERT INTO bo_scenario_indexable_attribute SELECT * FROM bo_scenario_indexable_attribute_temp; 

, но это дает мне Duplicate entry '285' for key 'PRIMARY'

какие-либо предложения ??

+0

удалить идентификатор из вставленных значений, поскольку идентификатор является основным ключом – Jens

+0

Если столбец идентификатора не является автоматическим приращением, вы должны генерировать для него все значения. если это так, то просто укажите имена столбцов в выражении insert ... select и позвольте базе данных генерировать новые идентификаторы для вас. –

+0

, когда я пишу столбцы, которые он мне дает, должен быть 1 столбец –

ответ

0

Вы скопировали свою таблицу во временную по первой инструкции. Затем вторым вы делаете обновление, а в третьем statament вы пытаетесь вставить в первую таблицу те же записи. Возможно, ваш столбец идентификатора имеет уникальный ключ, поэтому вы получаете «дублируемую запись для ключевого первичного».

Посмотрите здесь: SQL UNIQUE Constraint

+0

my id - первичный ключ auto increment –

0

Как @Franky указал, ваш id столбец имеет ограничение уникальности. Используйте это:

INSERT INTO bo_scenario_indexable_attribute SELECT version, mcs, name, search_id FROM bo_scenario_indexable_attribute_temp;

Оставляя значение id из вставки его столбец будет присвоен новый, неиспользованный значение идентификатора, которое удовлетворяет ограничение уникальности возложенную на колонке.


Редактировать на основе первого комментария:

Использование ниже запросов:

CREATE TEMPORARY TABLE bo_scenario_indexable_attribute_temp (SELECT version, mcs, name, search_id FROM bo_scenario_indexable_attribute WHERE mcs = @sales); 

UPDATE bo_scenario_indexable_attribute_temp SET mcs = @sales_master; 

INSERT INTO bo_scenario_indexable_attribute SELECT version, mcs, name, search_id FROM bo_scenario_indexable_attribute_temp; 

Вы получили эту ошибку, потому что вы скачали более столбцов в SELECT, чем вы вставляете в вашем INSERT.

+1

это дает мне код ошибки: 1136. Количество столбцов не соответствует количеству значений в строке 1 –

+0

Неплохо, посмотрите на редактирование. –

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