【问题标题】:Select only updated/new rows in MySQL database/table仅选择 MySQL 数据库/表中的更新/新行
【发布时间】:2013-01-14 22:46:47
【问题描述】:

在我当前的项目中,我正在尝试检查 MySQL 数据库:MySQL 数据库由另一个程序更新,因此我的 C++ 程序只需要选择新行。它不会是一个小表(>10000 行),所以我不想搜索每一行。即检查像 isNew=0 或 =1 这样的列。我已经找到了:

Query to find tables modified in the last hour

http://www.codediesel.com/mysql/how-to-check-when-a-mysql-table-was-last-updated/

但是,在此示例中,您只能获取已更新的表。如何仅从表中选择新行?

【问题讨论】:

  • 如果您经常需要这样做,为什么不使用is_new 或inserted_datetime 列,并在该列上建立索引?
  • 我不认为你可以在你的例子中。您可能会做一个 hack 让您的程序检查复制日志或其他东西并从那里获取您的信息。但是 10000 行对于 MySQL 来说确实不是一个很大的表。
  • 额外的isNew 列或更好的时间戳列有什么问题?搜索 10,000 行对 mysql 来说是小菜一碟。
  • 那么,直到有多少行是 mysql 的一个选项?
  • @Rogier “直到多少”...这个问题只有你才能回答。当它对你来说太慢时,它就不再是一种选择了。

标签: c++ mysql sql myisam


【解决方案1】:

我怎样才能只从表中选择新行?

假设新行意味着新插入,如果您可以更改数据库架构,则可以使用auto increment 列。通过在程序每次选择结果集时记住最大值,它可以保存该值以供下一个查询使用:

select * from table where id > 123

【讨论】:

    【解决方案2】:

    我建议将 isNew 列添加到默认值为 1 的表中,并在其上添加索引。该索引将阻止您的查询检查所有行。处理完该行后,将 isNew 设置为 0。

    【讨论】:

    • 这可能在一个查询中实现吗?
    • 您需要多个查询。 select * from table where isNew = 1 获取新条目,然后 update table set isNew = 0 完成后。
    • 真可惜 ;) 我想知道是否有类似于“select into”的“select update”之类的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 1970-01-01
    相关资源
    最近更新 更多