2012-04-11 45 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