【问题标题】:Row versioning for MySqlMySql 的行版本控制
【发布时间】:2010-12-27 14:34:27
【问题描述】:

MySQL 有内置的行版本控制机制吗?类似于 MS SqlServer 中的“时间戳”列。

【问题讨论】:

    标签: mysql rowversion


    【解决方案1】:

    Mysql 没有内置的行版本控制机制。虽然使用时间戳类型可能看起来没问题,但是对于同时更新多行并且花费比时间戳的解析时间更长的查询,您会遇到这种情况,因为分配的值是基于更改的开始而不是结束变化。

    因此,如果您的更新查询影响 100 行,所有行都将具有相同的时间戳(例如值 2015-10-28 09:47:10.123456)。但是,这些行可能要到 2015-10-28 09:47:10.654321 才能完成写入。

    如果您根据其他时间戳(例如 2015 年 10 月 28 日 09:47:10.500000)单独查找所有更改的行,您将不会得到您想要的结果。根据您的代码,您可能会错过更改的 100 行。

    事实上,现在对行的更改可能具有过去的时间戳,您不能简单地比较 2 个时间戳来获取所有更改的行。

    【讨论】:

    • 我认为当 2 个连接在不会导致时间值因时间戳解析而发生变化的时间内更新同一记录时,问题更多。在我看来,查找同时更改的记录是与行版本控制无关的要求。
    【解决方案2】:

    如果您添加“时间戳”字段,它会在您更新行时自动更新 - 虽然不完全是版本控制,但听起来可能就是您所追求的。

    【讨论】:

    • 谢谢。 'timestamp' 数据类型应该会有所帮助。
    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    • 2015-03-10
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多