我正在尝试重复行在同一个表中。表A有没有auto_increment(不幸)。重新评估每个INSERT的MySQL子查询
INSERT INTO A (id, foreign_id, value)
SELECT (SELECT MAX(id)+1 FROM A), 2, value
FROM A WHERE foreign_id = 1;
但(SELECT MAX(id)+1 FROM A)
计算一次,所以它总是会返回相同的ID。在第二行插入查询将失败(重复的主键)。
我想,第一:
INSERT INTO A (id, foreign_id, value)
SELECT MAX(id)+1, 2, value
FROM A WHERE foreign_id = 1;
但是,MAX(id)+1
考虑WHERE foreign_id = 1
,所以没有保证,我会得到一个未使用的ID。
我如何可以继续之一:
- 有重新计算每个
INSERT
- 或更一般的子查询:复制给我的表行有否auto_increment
使用'max(id)+ 1'生成一个唯一的号码在多用户系统中肯定会失败。您应该使用自动增量列来代替 – 2011-12-30 11:26:50
我正确的是,您并未真正复制,您尝试使用不同的ID创建单独的记录,并且使用的foreign_ID为2,但与具有1的foreign_ID的记录具有相同的值?所以如果你有以下2条记录:{1,1,1} {3,1,2}你想要一个新的集合{4,2,1}和{5,2,2}?如果是这样,你想要“复制”多少条记录,他们是否必须按照现有的记录顺序?而不是{4,2,1}和{5,2,2}将{4,2,1}和{6,2,2}?工作? – xQbert 2011-12-30 11:30:54
@a_horse_with_no_name是的我知道,这只是一个大脚本,没有多用户或任何东西。 – 2011-12-30 11:30:59