2012-04-11 40 views
5

在单个InnoDB事务中的2+查询中是否使用NOW()保证确保插入的datetime值在数据库中准确无误?NOW()为DATETIME InnoDB交易保证?

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

回答

5

Apparently it is not guaranteed跨越一个交易,但可以从一个声明到另一个声明。有一种变通方法,您可以使用as shown here

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

如果你想避免总共才设置的当前日期和时间到一个PHP变量并使用它。

+0

嗯..我打开这个问题去与PHP变量路线,你有任何想法如何实现它? http://stackoverflow.com/questions/10129180/get-datetime-in-php-and-post-it-to-mysql-for-transaction-consistency – Maverick 2012-04-12 18:21:12

+0

我的错误印象是,NOW()被修复在交易开始时达到一个特定的价值,但我看到这是不正确的。使用MySQL复制时,由NOW()返回的值由复制线程设置,但其值可以在单个事务中的语句之间更改。我认为我因为复制语义而被'NOW()'行为困惑,这是我能找到的唯一地方,那里有任何MySQL文档中的混淆。 – 2014-12-30 16:56:25