【问题标题】:Reuse Rows in mysql table without auto incrementing在不自动递增的情况下重用 mysql 表中的行
【发布时间】:2011-02-05 05:08:04
【问题描述】:

嘿,让我解释一下我的问题。我有一个 mysql 表,我在其中存储来自 5 个不同站点的数据馈送。现在我每天更新一次提要。我有这个自动递增的主键 FeedId。现在我要做的是,当我从特定站点更新提要时,我从表中删除该站点的先前数据并输入新数据。这样,新数据将填充到先前删除的数据占用的行中,如果这次有更多的提要,则在表的末尾输入剩余的数据。但是所有新数据的 FeedId 都会增加。 我想要的是存储在旧位置的提要保留以前的 ID,只有最后保存的额外 ID 才能获得新的递增 ID。请帮忙,因为我不知道该怎么做。

【问题讨论】:

  • 6 个问题的零接受并不是提供帮助的动力

标签: mysql


【解决方案1】:

更好的解决方案是在提要上设置一个唯一键(自动递增键除外)。然后使用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 列以显示如何更新字段)...

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • REPLACE 是邪恶的,应该避免。它们是一种快速消除所有外键关系(级联删除)的方法...
    • REPLACE 基本上就是DELETE+INSERT,所以我觉得反正会增加AUTO_INCREMENT。
    • @Mchl:谢谢。我已经用 del 更新了帖子,这样如果有人登陆这里,他们就会知道 REPLACE 做了什么。今天学到了一些新东西:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2018-05-09
    • 1970-01-01
    • 2012-04-12
    • 1970-01-01
    • 2021-12-17
    相关资源
    最近更新 更多