【问题标题】:NOW() for DATETIME InnoDB Transaction guaranteed?DATETIME InnoDB 事务的 NOW() 有保证吗?
【发布时间】:2012-04-24 04:38:45
【问题描述】:

是否在单个 InnoDB 事务中的 2+ 个查询中使用 NOW()保证插入的日期时间值在数据库中是准确的?

换句话说,NOW(),即使您在单个事务中使用它有超过 20 个查询,它是否总是相同的,还是会改变?

【问题讨论】:

    标签: php mysql transactions innodb


    【解决方案1】:

    Apparently it is not guaranteed 跨越事务,但可以在语句之间更改。有一个解决方法可以使用as shown here

    BEGIN;
    SELECT @now := NOW();
    INSERT ... VALUES (..., @now, ...);
    INSERT ... VALUES (..., @now, ...);
    UPDATE ... @now ...;
    COMMIT; 
    

    如果您想完全避免这种情况,只需将当前日期和时间设置为 PHP 变量并使用它。

    【讨论】:

    • 嗯..我用php变量路由打开了这个问题,你知道如何完成吗? stackoverflow.com/questions/10129180/…
    • 我误以为NOW() 在事务开始时被固定为特定值,但我认为这不是真的。使用 MySQL 复制时,NOW() 返回的值由复制线程设置,但其值可以在单个事务中的语句之间更改。我想我对 NOW() 的行为感到困惑是因为复制语义,这是我唯一能在 MySQL 文档中找到真正造成混淆的地方。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 2011-10-18
    相关资源
    最近更新 更多