2012-04-11 16 views
5

¿Usar NOW() en más de 2 consultas en una sola transacción InnoDB garantiza que el valor de fecha y hora insertado será exacto en la base de datos?AHORA() para DATETIME ¿Transacción InnoDB garantizada?

En otras palabras, ¿es AHORA(), incluso si tiene más de 20 consultas en una sola transacción utilizando siempre será la misma, o cambiará?

Respuesta

5

Apparently it is not guaranteed a través de una transacción pero puede cambiar de una declaración a otra. Hay una solución que puede utilizar as shown here:

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

Si se quiere evitar que en conjunto acaba de establecer la fecha y la hora actual en una variable PHP y utilizar en su lugar.

+0

Hmm ... Abrí esta pregunta con la ruta de la variable php, ¿tienes alguna idea de cómo lograrlo? http://stackoverflow.com/questions/10129180/get-datetime-in-php-and-post-it-to-mysql-for-transaction-consistency – Maverick

+0

Tenía la impresión errónea de que 'NOW()' se había solucionado al comienzo de una transacción a un valor específico, pero veo que eso no es cierto. Al utilizar la replicación de MySQL, el valor devuelto por 'NOW()' lo establece el hilo de replicación, pero su valor puede cambiar entre las declaraciones dentro de una sola transacción. Creo que estaba confundido por el comportamiento 'NOW()' debido a la semántica de replicación, que es el único lugar que puedo encontrar donde hay una verdadera fuente de confusión en la documentación de MySQL. –

Cuestiones relacionadas