2010-06-09 2 views
6

Мне нужно отслеживать дату и время создания пользователя в моей базе данных mysql. У меня есть столбец с именем «created», а тип данных - TIMESTAMP.php mysql timestamp

Проблема заключается в том, что когда пользователь меняет свой пароль или другую информацию, значение TIMESTAMP изменяется. Как я могу установить это, чтобы не меняться ????

ответ

5

Вы можете просто хотите установить его положение по умолчанию CURRENT_TIMESTAMP (как @Mark и @dcp отметил в других ответов):

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

Контрольный пример:

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) 

EDIT:

В моем первоначальном ответе я предложил использовать столбец DATETIME с предложением DEFAULT, установленным на CURRENT_TIMESTAMP. Однако это возможно только при использовании типа TIMESTAMP данных, так как stated in documentation:

DEFAULT ОГОВОРКА значение в спецификации типа данных указывает на то значение по умолчанию для столбца. За одним исключением значение по умолчанию должно быть константой; это не может быть функцией или выражением. Это означает, например, что вы не можете установить значение по умолчанию для столбца даты как значение функции, например NOW() или CURRENT_DATE. Исключением является то, что вы можете указать CURRENT_TIMESTAMP как значение по умолчанию для столбца TIMESTAMP.

3

Используйте столбец datetime. Автосохранение по времени.

+2

Не обязательно, вы можете установить его не на авто -Обновить. – dcp

+0

По умолчанию отметка времени не обновляется. – ajacian81

0
  • Оставьте этот формат так, как если бы вы вставили правильно вставленную вставленную строку с date().
  • Тогда должно быть updating, когда пользователь изменяет свою информацию.
7

Похоже, вам не столбец временной метки установлен правильно:

Отъезд 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, избили меня до него – Serge

0

При создании таблицы, вы должны опустить UPDATE ON

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

должен быть

ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

link

0

Под атрибутами, отключить "на обновление CURRENT_TIMESTAMP".

3

Измените его на DEFAULT CURRENT_TIMESTAMP, иначе он будет автообновлен.Из manual:

В операторе CREATE TABLE заявлении первого столбца TIMESTAMP могут быть объявлены в любой из следующих способов:

С обоими DEFAULT CURRENT_TIMESTAMP и ON UPDATE CURRENT_TIMESTAMP положений, столбец имеет текущую метку времени для значения по умолчанию и автоматически обновляется.

Без предложений DEFAULT или ON UPDATE это то же самое, что DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP.

С предложением DEFAULT CURRENT_TIMESTAMP и предложением ON UPDATE столбец имеет текущую временную метку для значения по умолчанию, но не обновляется автоматически.

Emphasis mine.