日期:2014-05-16  浏览次数:20381 次

timestamp使用

一. timestamp两种属性:
自动初始化: 此行为只在第一次写入数据时,怎么把时间设为当前时间. (DEFAULT CURRENT_TIMESTAMP)
自动更新: 此行为在修改资料时,会自动帮你把值修改为当前时间. (ON UPDATE CURRENT_TIMESTAMP)

?

二. 四种状态:
由上面两种属性延伸出四种状态
1. 自动初始化以及自动更新 (timestamp字段的数据默认就是此行为)
实现sql: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP


2.只做初始化,更新时不自动更新
实现sql: ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP


3.只做自动更新,不做初始化
实现sql: ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP


4. 什么都不做(建议这种情况,数据类型就使用datetime)

官方文档的说明

注:DEFAULT-->DEFAULT CURRENT_TIMESTAMP

????? ON UPDATE -->ON UPDATE CURRENT_TIMESTAMP

?

在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());