我需要跟蹤用戶在我的mysql數據庫中創建的日期和時間。我有名爲'created'的列和數據類型爲TIMESTAMP。php mysql timestamp
問題是,當用戶更改其密碼或其他信息時,TIMESTAMP值發生更改。我如何設置這個不會改變?
我需要跟蹤用戶在我的mysql數據庫中創建的日期和時間。我有名爲'created'的列和數據類型爲TIMESTAMP。php mysql timestamp
問題是,當用戶更改其密碼或其他信息時,TIMESTAMP值發生更改。我如何設置這個不會改變?
你可能只是想它的違約條款設置爲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
列的默認值。
使用日期時間列。時間戳自動更新。
使它成爲DateTime?
date()
正確插入。updating
。聽起來像是你沒有時間戳列設置正確:
時退房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,打敗我吧 – Serge 2010-06-09 20:31:17
當您創建表,你應該忽略ON UPDATE
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
應該是
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
屬性下,禁用 「上更新CURRENT_TIMESTAMP」。
將其更改爲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子句,該列具有默認值的當前時間戳,但不會自動更新。
強調我的。
這是你的情況有點髒,但你可以通過做臨時關閉自動更新:
UPDATE woot SET password=<value_to_set>, timestamp_colum_name=timestamp_colum_name;
(發現有:http://www.xarg.org/2010/06/disable-on-update-current-timestamp-in-mysql/)
不一定,你可以將它設置不自動-update。 – dcp 2010-06-09 20:24:38
默認情況下,時間戳不會更新。 – ajacian81 2011-11-16 10:55:29