2010-06-09 62 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) 

編輯:

在我最初的回答中,我建議使用DATETIME列,DEFAULT子句設置爲CURRENT_TIMESTAMP

在數據類型說明書中的DEFAULT值子句表示爲列的默認值:然而,這當使用TIMESTAMP數據類型,如stated in documentation纔是可能的。有一個例外,默認值必須是常數;它不能是一個函數或表達式。這意味着,例如,您不能將日期列的默認值設置爲函數的值,例如NOW()CURRENT_DATE。例外是,您可以指定CURRENT_TIMESTAMP作爲TIMESTAMP列的默認值。

3

使用日期時間列。時間戳自動更新。

+2

不一定,你可以將它設置不自動-update。 – dcp 2010-06-09 20:24:38

+0

默認情況下,時間戳不會更新。 – ajacian81 2011-11-16 10:55:29

0

使它成爲DateTime?

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 2010-06-09 20:31:17

0

當您創建表,你應該忽略ON UPDATE

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子句,該列具有默認值的當前時間戳,但不會自動更新。

強調我的。