【问题标题】:Is there a way in SQL to ask "what changed?"?SQL中有没有办法询问“发生了什么变化?”?
【发布时间】:2010-10-06 18:33:26
【问题描述】:

我经常发现自己正在使用一个我还不了解其架构的巨型 RDBMS 开展一个新项目。我希望能够在数据库中标记一个检查点,在应用程序中执行一些操作,然后返回数据库并询问哪些表发生了变化(理想情况下,哪些记录发生了变化)。

有没有办法用 SQL 做这样的事情?我找到了this,但它是仅限 MSSQL(我没有使用)。

它不需要超级高效。它只是在我的开发箱上,如果需要,我可以等待几秒钟,但我正在寻找比“两次转储整个数据库并区分结果”更好的东西。

【问题讨论】:

  • 如果您列出您正在使用的 RDBMS 会有帮助吗?并非所有 SQL 都是平等的。

标签: sql database diff


【解决方案1】:

如果您的 DBMS 支持查询日志记录,请将其打开并使用 tail -f 记录日志。

【讨论】:

  • 这可能是最简单的。我不知道为什么我没有想到。
【解决方案2】:

SQL Server 和 Oracle 都有一个可以启用的功能,称为“更改数据捕获”。您说您没有使用 SQL Server,但如果您使用的是 Oracle,那么这里仍有希望。也许您应该提及您使用的 dbms。

【讨论】:

  • SQL 变更数据捕获仅适用于企业版。有 ca$h 吗?
  • 有时是 MySQL,有时是 Postgres,有时是 SQLite ...我希望(哈哈!)有一种方法可以在任何 SQL DB 上运行。
【解决方案3】:

我很漂亮,我曾经遇到过一个位于您和服务器之间的 MySQL 代理工具。

我怀疑您会遇到一种适用于每个 SQL 数据库的解决方案。 (前后将所有表转储为 .SQL 或 .CSV 文件并进行比较?)

【讨论】:

    【解决方案4】:
    • 向记录所有更改的所有表添加触发器。
    • 检查是否可以挂钩到应用程序的数据访问层以记录内容
    • 或者它是否支持开箱即用的注销。 (我认为 Windows 上的 ODBC 支持这一点。)

    【讨论】:

      【解决方案5】:

      最好的办法是查看您的 RDBMS 是否提供可以执行此操作的专有功能,或者添加可以记录事件的更新触发器。

      【讨论】:

        【解决方案6】:

        在mysql中,我使用了一个列

        modified timestamp
        

        检索更改的行

        【讨论】:

          猜你喜欢
          • 2012-04-12
          • 2021-11-07
          • 2019-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-09
          相关资源
          最近更新 更多