mysql

时间:2016-07-04 09:55:05

标签: mysql

table1:bo_indexable_attribute

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

我想要的是复制此表的内容并将其再次插入其中,但这次使用不同的mcs列 所以我的尝试是

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'

任何建议??

2 个答案:

答案 0 :(得分:0)

您已通过第一个语句将表复制到临时表中。然后在第二个你进行更新,在第三个statament中,你试图在第一个表中插入相同的记录。也许您的id列具有唯一键,因此您可以获得“重复主键的重复条目”。

看看这里:SQL UNIQUE Constraint

答案 1 :(得分:0)

正如@Franky指出的那样,您的id列具有唯一约束。使用此:

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

通过不插入id值,将为列分配一个新的未使用的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中更多的列。