DATETIME类型和TIMESTAMP类型的差别

DATETIME类型

DATETIME类型存放数据范围从1001年到9999年,精度为秒,将时间和日期封装成格式为YYYYMMDDHHmmss的整数中,使用8个字节的存储空间。
DATETIME类型不存放任何时区相关信息。
DATETIME类型默认为NULL

TIMESTAMP类型

TIMESTAMP类型保存从1970-01-01 00:00(格林尼治标准时间)以来的秒数。
TIMESTAMP精确到秒,使用4个字节的存储空间,存储范围从1970年到2038年。
TIMESTAMP列默认为NOT NULL 在MySQL中,可以使用函数UNIX_TIMESTAMP和FROM_UNIXTIME来进行整数秒和TIMESTAMP时间的转换。
如:
SELECT UNIX_TIMESTAMP(NOW());
SELECT FROM_UNIXTIME(1468602420);

时间戳列属性

Timestarmp列可以设置两个属性:
1、DEFAULT CURRENT_TIMESTAMP 表示插入记录行时,如果未对该列指定值,则使用当前时间来为该字段赋值
2、ON UPDATE CURRENT_TIMESTAMP 表示在更新记录时,如果未更新该事件戳列,使用当前时间来更新该字段,

重点: 当时间戳列属性为ON UPDATE CURRENT_TIMESTAMP时,如果更新操作未给时间戳列指定新值且更新操作未对其他列造成数据变化,则该时间戳列数据不会发生变化。

如果在定义时间戳字段时列定义为:c1 timestamp DEFAULT CURRENT_TIMESTAMP,那么c1列仅在插入且未指定值时会被赋值为当前时间,在更新且未指定更新值时该时间戳列不会发生值变化。

CREATE TABLE tb1002(id int primary key,c1 timestamp DEFAULT CURRENT_TIMESTAMP);
insert into tb1002(id) select union select ;
update tb1002 set id= where id=;
select * from tb1002;
+----+---------------------+
| id | c1 |
+----+---------------------+
| | -- :: |
| | -- :: |
+----+---------------------+
从结果可以发现更新操作未更新时间戳列

如果在定义时间戳字段时列定义为:c1 timestamp ON UPDATE CURRENT_TIMESTAMP,那么C1列仅在更新且未指定更新值时会被更新为当前时间,而在插入时如果未指明插入值则将该事件戳列赋值为‘0000-00-00 00:00:00’

CREATE TABLE tb1003(id int primary key,c1 timestamp ON UPDATE CURRENT_TIMESTAMP);
insert into tb1003(id) select ;
select * from tb1003;
+----+---------------------+
| id | c1 |
+----+---------------------+
| | -- :: |
+----+---------------------+
从结果可以发现插入时列未被赋值为当前时间而被赋值为'0000-- ::’。

当时间戳字段被设置默认值,如在定义时间戳字段时列定义为:c1 timestamp default 0,,则不会为字段增加默认NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP属性

CREATE TABLE tb1004(id int primary key,c1 timestamp default );
查看建表语句变为:
CREATE TABLE `tb1004` (
`id` int() NOT NULL,
`c1` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 insert into tb1004(id) select union select ;
update tb1004 set id= where id=;
select * from tb1004; +----+---------------------+
| id | c1 |
+----+---------------------+
| | -- :: |
| | -- :: |
+----+---------------------+
从结果可以发现,无论是插入还是更新,都没有将时间戳字段更新为当前时间,而是使用默认值!

MySQL--时间戳属性1的更多相关文章

  1. FROM_UNIXTIME 格式化MYSQL时间戳函数

    FROM_UNIXTIME 格式化MYSQL时间戳函数 对MYSQL没有进行过深入的研究,基础知识匮乏,一遇到问题只能手册,看来要把MYSQL的学习安排进时间表了. 函数:FROM_UNIXTIME作 ...

  2. MySQL时间戳和时间格式转换函数

    MySQL时间戳和时间格式转换函数:unix_timestamp and from_unixtime unix_timestamp将时间转化成时间戳格式.from_unixtime将时间戳转化成时间格 ...

  3. MySQL 时间戳(Timestamp)函数

    1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp() mysql> select current_timestamp, curren ...

  4. MySQL字段属性NUll的注意点

    MySQL字段属性应该尽量设置为NOT NULL 除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL.这看起来好像有点争议,请往下看. 空值("&quo ...

  5. MySQL 时间戳(Timestamp)函数

    1. MySQL 获得当前时间戳函数:current_timestamp, current_timestamp() mysql> select current_timestamp, curren ...

  6. mysql数据库优化课程---4、mysql字段属性

    mysql数据库优化课程---4.mysql字段属性 一.总结 一句话总结: mysql字段:没有被淘汰的必然有其存在的合理性(也就是有优点),比如char类型 1.为什么char类型没有被淘汰? c ...

  7. MySQL 时间戳与日期互相转换

    MySQL 时间戳与日期互相转换 1.时间戳转换成日期 函数:FROM_UNIXTIME() ,'%Y年%m月%d日') 结果为:2015年04月15日 2.把日期转换为时间戳,和 FROM_UNIX ...

  8. 一起MySQL时间戳精度引发的血案

    写在前面 最近工作中遇到两例mysql时间戳相关的问题,一个是mysql-connector-java和msyql的精度不一致导致数据查不到:另一例是应用服务器时区错误导致数据查询不到.通过这篇文章, ...

  9. MYSQL时间戳和日期相互转换 笔记整理

    相关函数: date_format(date, format) 函数,MySQL日期格式化函数date_format() unix_timestamp() 函数 str_to_date(str, fo ...

  10. Mysql时间戳转Java时间戳

    MySQL 时间戳和Java返回的时间戳是不一样的 例如: 当前时间是 2014-08-04 10:42:55.204000 使用mysql时间戳函数UNIX_TIMESTAMP 返回的结果为: 14 ...

随机推荐

  1. mysql 从库执行insert失败导致同步停止

    服务配置:一主一从,版本都是 5.5 .主库配置了 binlog-do-db binlog-ignore-db 问题复述:运营人员发现,昨天的数据统计不对.数据分析服务查询的是从库的数据. 到tomc ...

  2. 2.12 C++ explicit关键字详解

    参考:http://www.cnblogs.com/ymy124/p/3632634.html 总结: 带参数的构造函数中有两种比较常见的构造函数:拷贝构造函数和转型构造函数. 转型构造函数只有一个参 ...

  3. SQL-39 使用索引

    题目描述 针对salaries表emp_no字段创建索引idx_emp_no,查询emp_no为10005, 使用强制索引.CREATE TABLE `salaries` (`emp_no` int( ...

  4. 进程创建过程详解 CreateProcess

    转载请您注明出处:http://www.cnblogs.com/lsh123/p/7405796.html 0x01 CreateProcessW CreateProcess的使用有ANSI版本的Cr ...

  5. Ubuntu16.04 python2.7升级python3.5

    正常情况下,你安装好ubuntu16.04版本之后,系统会自带 python2.7版本,如果需要下载新版本的python3.5,就需要进行更新.下面给出具体教程: 1.首先在ubuntu的终端tern ...

  6. fk输入地壳模型容易出错的地方

    结束的那一层地壳模型后面不再有空格,否则不会有波形.

  7. 11.Python-第三方库requests详解(三)

    Response对象 使用requests方法后,会返回一个response对象,其存储了服务器响应的内容,如上实例中已经提到的 r.text.r.status_code……获取文本方式的响应体实例: ...

  8. TensorFlow函数:tf.truncated_normal

    tf.truncated_normal函数 tf.truncated_normal( shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, ...

  9. Day20作业及默写

    1.请使用C3算法计算出链接图中的继承顺序-Link 一 graph BT id1[A]-->id2[B] id2[B]-->id6[F] id6[F]-->id7[G] id1[A ...

  10. python day06 作业答案

    1. count=1 while count<11: fen=input('请第{}个评委打分' .format( count)) if int(fen) >5 and int(fen) ...