在没有自动递增的情况下重用mysql表中的行

时间:2011-02-04 18:47:19

标签: mysql

嘿,让我解释一下我的问题。我有一个mysql表,其中我存储来自5个不同站点的数据馈送。现在我每天更新一次Feed。我有这个主键FeedId自动递增。现在我做的是当我更新来自特定站点的订阅源时,我从我的表中删除该站点的先前数据并输入新的。这样,新数据填充在先前删除的数据占用的行中,并且如果此时有更多的源,则在表的末尾输入其余的数据。但是FeedId会针对所有新数据递增。 我想要的是,存储在旧位置的馈送保留先前的ID,只有在末尾保存的额外节点获得新的增量ID。请帮忙,因为我无法弄清楚如何做到这一点。

2 个答案:

答案 0 :(得分:3)

更好的解决方案是在Feed上设置唯一键(除了自动递增的键)。然后使用INSERT ON DUPLICATE KEY UPDATE

INSERT INTO feeds (name, url, etc, etc2, `update_count`) 
    VALUES ('name', 'url', 'etc', 'etc2', 1) 
    ON DUPLICATE KEY UPDATE
        `etc` = VALUES(`etc`),
        `etc2` = VALUES(`etc2`),
        `update_count` = `update_count` + 1;

好处是你没有增加id,而你仍然在一个原子查询中执行它。此外,您只需更新/更改需要更改的内容。 (请注意,我添加了update_count列以显示如何更新字段)...

答案 1 :(得分:0)

根据评论将帖子标记为删除 尝试REPLACE INTO来合并数据。 更多信息@:

  

http://dev.mysql.com/doc/refman/5.0/en/replace.html