2010-06-09 20 views
6

Necesito hacer un seguimiento de la fecha y la hora en que se creó un usuario en mi base de datos mysql. Tengo una columna llamada 'creada' y el tipo de datos como TIMESTAMP.php mysql timestamp

El problema es que cuando un usuario cambia su contraseña u otra información, el valor de TIMESTAMP cambia. ¿Cómo puedo configurar esto para que no cambie?

Respuesta

5

Usted puede simplemente querer establecer su cláusula de incumplimiento a CURRENT_TIMESTAMP (como @Mark y @dcp se señala en las otras respuestas): caso

CREATE TABLE your_table (
    ... 
    `created_timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
); 

prueba:

CREATE TABLE tb (`a` int, `c` TIMESTAMP DEFAULT CURRENT_TIMESTAMP); 
Query OK, 0 rows affected (0.04 sec) 

INSERT INTO tb (a) VALUES (1); 
Query OK, 1 row affected (0.01 sec) 

SELECT * FROM tb; 
+------+---------------------+ 
| a | c     | 
+------+---------------------+ 
| 1 | 2010-06-09 23:31:16 | 
+------+---------------------+ 
1 row in set (0.00 sec) 

UPDATE tb SET a = 5; 
Query OK, 1 row affected (0.00 sec) 
Rows matched: 1 Changed: 1 Warnings: 0 

SELECT * FROM tb; 
+------+---------------------+ 
| a | c     | 
+------+---------------------+ 
| 5 | 2010-06-09 23:31:16 | 
+------+---------------------+ 
1 row in set (0.00 sec) 

EDITAR:

En mi respuesta original sugerí usar una columna DATETIME con una cláusula DEFAULT establecida en CURRENT_TIMESTAMP. Sin embargo esto sólo es posible cuando se utiliza el tipo de datos TIMESTAMP, como stated in documentation:

La cláusula DEFAULT valor en una especificación de tipo de datos indica un valor predeterminado para una columna. Con una excepción, el valor predeterminado debe ser una constante; no puede ser una función o una expresión. Esto significa, por ejemplo, que no puede establecer el valor predeterminado para una columna de fecha para que sea el valor de una función como NOW() o CURRENT_DATE. La excepción es que puede especificar CURRENT_TIMESTAMP como valor predeterminado para una columna TIMESTAMP.

3

Use una columna de fecha y hora. Marca de tiempo auto-actualizaciones.

+2

No necesariamente, puede configurarlo para que no automático -actualizar. – dcp

+0

De forma predeterminada, la marca de tiempo NO se actualiza. – ajacian81

0

¿Qué es un DateTime?

0
  • Deje el formato como está, pero cuando inserte formatee la cadena insertada correctamente con date().
  • Luego debe ser updating cuando el usuario cambie su información.
7

suena como usted no ha configurado la columna de la marca de tiempo de manera adecuada:

Mira la guide:

* 

    Auto-initialization and auto-update: 

    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

* 

    Auto-initialization only: 

    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

* 

    Auto-update only: 

    ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP 

* 

    Neither: 

    ts TIMESTAMP DEFAULT 0 
+1

+1, pásamelo – Serge

0

Cuando se crea la tabla, se debe omitir la actualización en

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

debe ser

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

link

0

Bajo atributos, desactivar "en la actualización CURRENT_TIMESTAMP".

3

Cambie a DEFAULT CURRENT_TIMESTAMP de lo contrario se actualizará automáticamente.Desde el manual:

En una sentencia CREATE TABLE, la primera columna TIMESTAMP puede ser declarado en cualquiera de las siguientes maneras:

Con tanto DEFAULT CURRENT_TIMESTAMP y actualización sobre las cláusulas CURRENT_TIMESTAMP, la columna tiene la fecha y hora actual para su valor predeterminado, y se actualiza automáticamente.

Con cláusulas DEFAULT o ON UPDATE, es lo mismo que DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP.

Con una cláusula DEFAULT CURRENT_TIMESTAMP y sin cláusula ON UPDATE, la columna tiene la marca de tiempo actual para su valor predeterminado, pero no se actualiza automáticamente.

Énfasis mío.

Cuestiones relacionadas