2011-12-28 17 views
5

Tengo esta fila stamp timestamp DEFAULT NOW() ON UPDATE NOW() en mi tabla, y la necesito actualizar incluso cuando la actualización que estoy ejecutando es básicamente la misma en todos los campos.Actualice la tabla mysql con los mismos valores y obtenga una actualización de marca de tiempo

¿Hay alguna manera de hacer esto dentro de la declaración de la mesa, al igual que cualquier otra opción que no sea on update, o tengo que forzar una stamp = now() cada actualización vez que (y eliminar la on update, por supuesto, ya que será inútil)

que he visto this thread, pero sólo responde a lo que está sucediendo y por qué, no cómo conseguir alrededor de él que no sea obligando indirectamente

Respuesta

2

Habría que utilizar un disparador para que la fuerza cada vez.

DELIMITER GO 

CREATE TRIGGER `mydb`.`mytable_U` BEFORE UPDATE ON `mydb`.`mytable` 
FOR EACH ROW 
BEGIN 
    SET NEW.stamp = CURRENT_TIMESTAMP; 
END 
GO 

DELIMITER ; 
+0

Gracias, voy a intentarlo – Bimp

+0

Hmm, ¿puedo configurar este disparador dentro de mi código java por casualidad, o tiene que hacerse de forma externa? – Bimp

+0

@Jayto: entra en la base de datos. El motor de DB lo dispara cuando envías una ACTUALIZACIÓN – gbn

1

Me resulta más fácil simplemente hacer lo siguiente como parte de su instrucción de actualización:

UPDATE table_name SET last_logged_in = NOW() WHERE `user_id`... 

De esta manera el valor está siempre actualizado y si nada más ha cambiado la marca de tiempo todavía se actualiza. Gracias por tu pregunta; era lo mismo que el mío

3

Como dijo @veeTrain, sería fácil si lo agregó a su declaración de actualización. Esta es solo otra forma de hacerlo, también puedes usar unix_timestamp().

UPDATE nombre_tabla SET last_logged_in = unix_timestamp() WHERE Identificación = '$user_id'

sé que mi respuesta es tarde, pero me encontré con un problema similar y pensé que me gustaría compartir mi solución para aquellos que tiene este hilo en el futuro.

+0

que depende del tipo de la columna 'last_logged_in'. UNIX_TIMESTAMP() devuelve un entero, mientras que NOW() devuelve un DATETIME formateado. Hay razones para elegir una sobre la otra, consulte esta pregunta para obtener más información: http://stackoverflow.com/questions/14849911/difference-between-unix-timestamp-and-now-in-mysql – SpaceDog

+1

Correcto, también depende de el uso. También puede usar el formato de PHP donde sea necesario: fecha ("F j, Y, g: i a"); Referencia PHP: [aquí] (http://php.net/manual/en/function.date.php) y funciones de fecha/hora de MySQL: [aquí] (http://dev.mysql.com/doc/refman/ 5.6/es/date-and-time-functions.html) – Winter

Cuestiones relacionadas