【发布时间】:2012-04-24 04:38:45
【问题描述】:
是否在单个 InnoDB 事务中的 2+ 个查询中使用 NOW()保证插入的日期时间值在数据库中是准确的?
换句话说,NOW(),即使您在单个事务中使用它有超过 20 个查询,它是否总是相同的,还是会改变?
【问题讨论】:
标签: php mysql transactions innodb
是否在单个 InnoDB 事务中的 2+ 个查询中使用 NOW()保证插入的日期时间值在数据库中是准确的?
换句话说,NOW(),即使您在单个事务中使用它有超过 20 个查询,它是否总是相同的,还是会改变?
【问题讨论】:
标签: php mysql transactions innodb
Apparently it is not guaranteed 跨越事务,但可以在语句之间更改。有一个解决方法可以使用as shown here:
BEGIN;
SELECT @now := NOW();
INSERT ... VALUES (..., @now, ...);
INSERT ... VALUES (..., @now, ...);
UPDATE ... @now ...;
COMMIT;
如果您想完全避免这种情况,只需将当前日期和时间设置为 PHP 变量并使用它。
【讨论】:
NOW() 在事务开始时被固定为特定值,但我认为这不是真的。使用 MySQL 复制时,NOW() 返回的值由复制线程设置,但其值可以在单个事务中的语句之间更改。我想我对 NOW() 的行为感到困惑是因为复制语义,这是我唯一能在 MySQL 文档中找到真正造成混淆的地方。