mysql時間類型timestamp知識點

mysql日期時間類型

日期類型 字節 最小值 最大值
DATE 4 1000-01-01 9999-12-31
DATETIME 8 1000-01-01 00:00:00
TimeStamp 4 197001010800001 2038年
Time 3 -838:59:59 838:59:59
year 1 1901 2155

知識點:
1 如果需要經常插入或者更新日期爲當前時間 則通常使用Timestamp,timestamp值返回後顯示爲”YYYY-MM-DD HH:MM:SS”格式的字符串
2 如果只表示年份可以用year 他比date佔用更少的空間year有2位或者4位格式的年默認爲4位
3 每種日期類型都有一個有效值範圍如果超出這個範圍將以零值進行存儲

DATE TIME DATETIME爲最常用

實例:

CREATE TABLE t (d date , t  time , dt datetime);
desc t

這裏寫圖片描述

insert INTO t VALUES(NOW(),NOW(),NOW())
select * from t

這裏寫圖片描述

DATETIME是date和time的結合

Timestamp實例

CREATE TABLE ttt (t timestamp);

這裏寫圖片描述
系統自動給timestamp加上了默認值

INSERT INTO ttt VALUES(NULL)
select * from ttt

這裏寫圖片描述

插入null 系統自動插入了當前時間戳
mysql中只給表中的第一個timestamp字段類型設置默認值爲當前日期 如果有第二個timestamp類型則默認值設置爲0

alter TABLE ttt add t2 timestamp;
SHOW CREATE TABLE ttt;
CREATE TABLE `ttt` (
  `t` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `t2` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'
) ENGINE=MyISAM DEFAULT CHARSET=utf8

mysql一個表中值允許一列的默認值爲current_timestamp

INSERT INTO ttt VALUES(null,null)

這裏寫圖片描述

update ttt set t2 = '2015-11-28 03:00:40' where t='2015-11-27 03:00:40'

這裏寫圖片描述

t2 變了 t也變化成了當前時間 這是一個大坑 尤其是在一些需要按創建時間排序的需求中

所以結論是在mysql中使用時間字段timestamp時注意一定要 加上初始化的值 並且不能是current_timestamp

修改t爲有初始值

alter TABLE ttt   change `t` `t` timestamp default '0000-00-00 00:00:00' NOT NULL ;
desc ttt

這裏寫圖片描述

此時再去

update ttt set t2 = '2015-11-28 04:00:40' where t='2015-11-27 03:02:50'

這裏寫圖片描述

t沒發生變化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章