我有相同结构的两个表。 表A中包含了目前所有的广告,表B包含已归档的广告。 柱1(ad_id)是主键,AI,INT。 表引擎是MyISAM的。
我需要复制所有的某一日期,以存档,表B.我的目标是,除了ad_id所有字段重复之前的表格中的广告,ad_id应该得到自动递增。 以下是我已经尝试:
INSERT INTO B`(`ad_id`, `ad_advertiser`, `ad_ln`, `ad_expire`)
SELECT *
FROM A
WHERE YEAR( ad_expire ) <= 2012
表B有成千上万的广告,表A被刷新往往不够,独特的ID字段具有较低的数字,经常重复的ID表B.因此MySQL夹头颤抖,并告诉我,我有一个Duplicate entry '8577' for key 'PRIMARY'
。
所以我做了多次尝试获取过去认为:
首先我想选择单独的列中插入,设置ad_id
为NULL:
INSERT INTO B(`ad_id`, `ad_advertiser`, `ad_ln`, `ad_expire`)
SELECT (NULL, `ad_advertiser`, `ad_ln`, `ad_expire`)
FROM A
WHERE YEAR( ad_expire ) <= 2012
这导致错误#1241 - Operand should contain 1 column(s)
其消失,如果我使用通配符*选择,但后来我得到重复的错误。
接下来我想SELECT LAST_INSERT_ID()
它总是返回0。
然后,我尝试了一些使用ON DUPLICATE KEY UPDATE
,但我似乎无法得到那个工作。
我甚至想抓最高的ID有:
SELECT @max := max(ad_id) FROM B;
INSERT INTO B`(`ad_id`, `ad_advertiser`, `ad_ln`, `ad_expire`)
SELECT *
FROM A
WHERE YEAR( ad_expire ) <= 2012
ON DUPLICATE KEY UPDATE ad_id = @max + 1
这工作了整整一排,然后在重复的条目再次产生(因为@Max是一个静态变量)。
我在做什么错在这里? 我在做这样太难?