mysql时间类型timestamp知识点
2015-11-26 19:14
656 查看
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没发生变化
相关文章推荐
- 高性能MySql进化论(十):查询优化器的局限性
- 高性能MySql进化论(九):查询优化器常用的优化方式
- 高性能MySql进化论(七):正确的使用索引
- 高性能MySql进化论(六):常见索引类型的原理及其特点的介绍
- 由一次mycat+mysql水平拆分集群问题引发的思考
- 高性能MySql进化论(五):提速Alter Table
- MySQL语句汇总
- 由一次mycat+mysql水平拆分集群问题引发的思考
- mysql行锁深入研究
- 高性能MySql进化论(四):Summary,Cache,Counter表的使用
- 高性能MySql进化论(三):ID(标示符)的选择
- 高性能MySql进化论(二):数据类型的优化_下
- 高性能MySql进化论(一):数据类型的优化_上
- 连接MySQL失败,错误代码10038
- mysql的主从复制原理
- Mysql重装
- mysql的主从复制配置
- MySQL 之索引优化(二)
- MYSQL 更改连接用户数
- MySQL如何利用索引优化ORDER BY排序语句