mysql時間型別timestamp知識點
阿新 • • 發佈:2019-02-13
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沒發生變化