MySQL5的日期类型有三种:DATETIME、DATE和TIMESTAMP,除了DATE用来表示一个不带时分秒的是日期,另外两个都带时分秒。TIMESTAMP还可以精确到毫秒。
其次还有个共性,就是他们的格式“不严格”,很自由,一般你认为对的格式都可以正确插入到数据库中。
这里主要讲解关于TIMESTAMP时分秒的问题。
TIMESTAMP
MySQL 获得当前时间戳函数:current_timestamp, current_timestamp()
mysql> select current_timestamp, current_timestamp();
+---------------------+---------------------+
| current_timestamp | current_timestamp() |
+---------------------+---------------------+
| 2008-08-09 23:22:24 | 2008-08-09 23:22:24 |
+---------------------+---------------------+
1:timestamp设置默认值是:Default CURRENT_TIMESTAMP
2:timestamp设置随着表变化而自动更新是ON UPDATE CURRENT_TIMESTAMP
3:但是由于一个表中至多只能有一个字段设置CURRENT_TIMESTAMP
两行设置DEFAULT CURRENT_TIMESTAMP是不行的。
总结
1.第一次插入时记录一次时间戳
2.每次更新都更新时间戳
3.只记录简要时间,比如Date
如果是第一种和第二种情况,使用timestamp相比datetime要更为方便些。timestamp默认值有三种:
■无
■NULL
■NOT NULL DEFAULT CURRENT_TIMESTAMP
■NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
其中,
■CURRENT_TIMESTAMP - 当更新此条记录时,时间戳不会改变
■CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP - 当更新此条记录时,时间戳将会改变,变为最新时间
设置CURRENT_TIMESTAMP默认值后,插入记录还是更新记录都不需要维护该字段,该字段完全由MySQL维护,就像AutoIncrement字段一样,但如果使用上文设置的datetime字段,则需要手动构造时间更新,比如类似now()等。
对CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,有个特殊情况,假如你更新的字段值(UPDATE)没有变化时,MySQL将会忽略更新操作,所以,时间戳也不会改变。另外,如果有多个CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP列,那么MySQL只会更新第一个。
参考资料:http://blog.chinaunix.net/uid-21505614-id-3886343.html
参考资料:http://www.cnblogs.com/yjf512/archive/2012/11/02/2751058.html