2012-04-11 15 views
5

L'utilizzo di NOW() in 2+ query in una singola transazione InnoDB garantisce che il valore datetime inserito sarà esatto nel database?NOW() per DATETIME InnoDB Transaction garantita?

In altre parole, è l'ORA(), anche se si dispone di più di 20 query in una singola transazione utilizzando sempre sarà uguale, o cambierà?

risposta

5

Apparently it is not guaranteed attraverso una transazione ma può cambiare da istruzione a istruzione. C'è una soluzione è possibile utilizzare as shown here:

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

Se si vuole evitare che complessivamente sufficiente impostare la data e l'ora corrente in una variabile PHP e l'uso che, invece.

+0

Hmm .. Ho aperto questa domanda andando con il percorso variabile php, hai qualche idea di come realizzarlo? http://stackoverflow.com/questions/10129180/get-datetime-in-php-and-post-it-to-mysql-for-transaction-consistency – Maverick

+0

Avevo l'impressione errata che "NOW()" fosse stato corretto all'inizio di una transazione su un valore specifico, ma vedo che non è vero. Quando si usa la replica MySQL, il valore restituito da 'NOW()' è impostato dal thread di replica, ma il suo valore può cambiare tra le istruzioni all'interno di una singola transazione. Penso di essere stato confuso dal comportamento 'NOW()' a causa della semantica della replica, che è l'unico posto dove posso trovare una vera fonte di confusione nella documentazione di MySQL. –