sqlite3中timestamp使用

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_TIMESTAMP
date


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被插入到該列內。換句話說,只有使用以下建立,定義爲 NULLTIMESTAMP列纔會自動更新:

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);
相關文章
相關標籤/搜索