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. vue-6-事件处理

    <div id="example-2"> <button v-on:click="greet">Greet</button> ...

  2. bind配置文件

    options{} - 整个bind使用的全局配置选项 bind监听的端口,数据文件存储位置,缓存的存储位置,权限加密的控制 logging{}- 服务日志选项 日志输出的位置,以及输出的级别 zon ...

  3. 十六. Python基础(16)--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

  4. [Leetcode 392]判断子序列 Is Subsequence

    [思路] 判断s是否为t的子串,所以length(s)<=length(t).于是两个指针,一次循环. 将s.t转换为数组p1.p2. i为过程中s的匹配长度. i=0空串,单独讨论返回true ...

  5. windows文件映射

    0x01 使用文件映射实现共享内存. 用内存映射文件实现进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在进程中保留一段内存区域,把硬盘或页文件上的目标 ...

  6. poj1742(多重背包分解+01背包二进制优化)

    Description People in Silverland use coins.They have coins of value A1,A2,A3...An Silverland dollar. ...

  7. ORACLE CASE WHEN 及 SELECT CASE WHEN的用法

    Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...

  8. Join Algorithm

    Join(SQL) An SQL join clause combines columns from one or more tables in a relational database. It c ...

  9. <Impala><Overview><UDF>

    Overview Apache Impala (incubating) is the open source, native analytic database for apache Hadoop. ...

  10. IOS内置safari浏览器日期字符串转Date对象失败

    代码示例: <html> <head> <title>Date字符串转化示例</title> </head> <body> &l ...