timestamp使用sql
一. timestamp兩種屬性:
自動初始化: 此行爲只在第一次寫入數據時,怎麼把時間設爲當前時間. (DEFAULT CURRENT_TIMESTAMP)
自動更新: 此行爲在修改資料時,會自動幫你把值修改成當前時間. (ON UPDATE CURRENT_TIMESTAMP)spa
二. 四種狀態:
由上面兩種屬性延伸出四種狀態
1. 自動初始化以及自動更新 (timestamp字段的數據默認就是此行爲)
實現sql: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP文檔
2.只作初始化,更新時不自動更新
實現sql: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMPdate
3.只作自動更新,不作初始化
實現sql: ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP數據類型
4. 什麼都不作(建議這種狀況,數據類型就使用datetime)
im
官方文檔的說明時間戳
注:DEFAULT-->DEFAULT CURRENT_TIMESTAMP數據
ON UPDATE -->ON UPDATE CURRENT_TIMESTAMPdatetime
在CREATE TABLE語句中,第1個TIMESTAMP列能夠用下面的 任何一種方式聲明:時間
1: 若是定義時DEFAULT 和ON UPDATE 子句都有,列值爲默認使用當前的時間戳,而且自動更新。
2: 若是不使用DEFAULT和ON UPDATE子句,那麼它等同於DEFAULT ON UPDATE。
3: 若是隻有DEFAULT子句,而沒有ON UPDATE子句,列值默認爲當前時間戳但不自動更新。
4: 若是沒用DEFAULT子句,但有ON UPDATE 子句,列默認爲0並自動更新。
5: 若是有一個常量值DEFAULT,該列會有一個默認值,並且不會自動初始化爲當前時間戳。若是該列還有一個ON UPDATE 子句,這個時間戳會自動更新,不然該列有一個默認的常量但不會自動更新。
下面這些語句是等效的:
CREATE TABLE t (ts TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
DEFAULT CURRENT_TIMESTAMP);
ts TIMESTAMP DEFAULT 0 //只是給一個常量(注:0000-00-00 00:00:00)
能夠在TIMESTAMP列的定義中包括NULL屬性以容許列包含NULL值。例如:
CREATE TABLE t
(
ts1 TIMESTAMP NULL DEFAULT NULL,
ts2 TIMESTAMP NULL DEFAULT 0,
ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
);
未指定NULL屬性,將列設置爲NULL,用於將它設置爲當前的時間戳。
注意容許NULL值的TIMESTAMP列不會採用當前的時間戳,除非要麼其 默認值定義爲CURRENT_TIMESTAMP,或者NOW()或CURRENT_TIMESTAMP被插入到該列內。換句話說,只有使用以下建立,定義爲 NULL的TIMESTAMP列纔會自動更新:
CREATE TABLE t (ts NULL DEFAULT CURRENT_TIMESTAMP);
CREATE TABLE t1 (ts NULL DEFAULT NULL);
CREATE TABLE t2 (ts NULL DEFAULT '0000-00-00 00:00:00');
則必須顯式插入一個對應當前日期和時間的值。例如:
INSERT INTO t1 VALUES (NOW());
INSERT INTO t2 VALUES (CURRENT_TIMESTAMP);