在mysql数据库中,时间戳TIMESTAMP有如下的一些变体:

1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在创建新记录和修改现有记录时,都会刷新该数据列。

2,TIMESTAMP DEFAULT CURRENT_TIMESTAMP

在创建新记录时,把这个字段设置为当前时间,但以后修改时,不再刷新它。

3,TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

在创建新记录时,把这个字段设置为0,以后修改时刷新它。

4,TIMESTAMP DEFAULT ‘yyyy-mm-dd hh:mm:ss’ ON UPDATE CURRENT_TIMESTAMP

在创建新记录时,把这个字段设置为给定值,以后修改时刷新它。

MySQL目前不支持列的Default 为函数的形式,如达到某列的默认值为当前更新日期与时间的功能,可以考虑使用TIMESTAMP列类型。

以上是mysql中TIMESTAMP列类型的说明。

*TIMESTAMP列类型*

TIMESTAMP值可以从1970的某时的开始一直到2037年,精度为一秒,其值作为数字显示。

TIMESTAMP值显示尺寸的格式如下表所示:

复制代码 代码示例:

+---------------+----------------+

| 列类型    | 显示格式    |

| TIMESTAMP(14) | YYYYMMDDHHMMSS |

| TIMESTAMP(12) | YYMMDDHHMMSS  |

| TIMESTAMP(10) | YYMMDDHHMM   |

| TIMESTAMP(8) | YYYYMMDD    |

| TIMESTAMP(6) | YYMMDD     |

| TIMESTAMP(4) | YYMM      |

| TIMESTAMP(2) | YY       |

+---------------+----------------+

“完整”TIMESTAMP格式是14位,但TIMESTAMP列也可以用更短的显示尺寸创造最常见的显示尺寸是6、8、12、和14。

你可以在创建表时指定一个任意的显示尺寸,但是定义列长为0或比14大均会被强制定义为列长14。

列长在从1~13范围的奇数值尺寸均被强制为下一个更大的偶数。

*列如:*

复制代码 代码示例:

定义字段长度   强制字段长度

TIMESTAMP(0) -> TIMESTAMP(14)

TIMESTAMP(15)-> TIMESTAMP(14)

TIMESTAMP(1) -> TIMESTAMP(2)

TIMESTAMP(5) -> TIMESTAMP(6)

所有的TIMESTAMP列都有同样的存储大小,使用被指定的时期时间值的完整精度(14位)存储合法的值不考虑显示尺寸。

不合法的日期,将会被强制为0存储。

具体含义:

1、虽然建表时定义了列TIMESTAMP(8),但在进行数据插入与更新时TIMESTAMP列实际上保存了14位的数据(包括年月日时分秒),只不过在你进行查询时MySQL返回给你的是8

位的年月日数据。如果你使用ALTER TABLE拓宽一个狭窄的TIMESTAMP列,以前被“隐蔽”的信息将被显示。

2、同样,缩小一个TIMESTAMP列不会导致信息失去,除了感觉上值在显示时,较少的信息被显示出。

3、尽管TIMESTAMP值被存储为完整精度,直接操作存储值的唯一函数是UNIX_TIMESTAMP();由于MySQL返回TIMESTAMP列的列值是进过格式化后的检索的值,这意味着你可能不

能使用某些函数来操作TIMESTAMP列(例如HOUR()或SECOND()),除非TIMESTAMP值的相关部分被包含在格式化的值中。例如,一个TIMESTAMP列只有被定义为TIMESTAMP(10)以

上时,TIMESTAMP列的HH部分才会被显示,因此在更短的TIMESTAMP值上使用HOUR()会产生一个不可预知的结果。

4、不合法TIMESTAMP值被变换到适当类型的“零”值(00000000000000)。(DATETIME,DATE亦然)

可以使用下列语句来验证:

复制代码 代码示例:

CREATE TABLE test ('id' INT (3) UNSIGNED AUTO_INCREMENT, 'date1'

TIMESTAMP (8) PRIMARY KEY('id'));

INSERT INTO test SET id = 1;

SELECT * FROM test;

+----+----------------+

| id | date1     |

+----+----------------+

| 1 | 20021114    |

+----+----------------+

ALTER TABLE test CHANGE 'date1' 'date1' TIMESTAMP(14);

SELECT * FROM test;

+----+----------------+

| id | date1     |

+----+----------------+

| 1 | 20021114093723 |

+----+----------------+

可以使用TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作。

如果有多个TIMESTAMP列,只有第一个自动更新。自动更新第一个TIMESTAMP列在下列任何条件下发生:

1、列值没有明确地在一个INSERT或LOAD DATA INFILE语句中指定。

2、列值没有明确地在一个UPDATE语句中指定且另外一些的列改变值。(注意一个UPDATE设置一个列为它已经有的值,这将不引起TIMESTAMP列被更新,因为如果你设置一个列

为它当前的值,MySQL为了效率而忽略更改。)

3、你明确地设定TIMESTAMP列为NULL.

4、除第一个以外的TIMESTAMP列也可以设置到当前的日期和时间,只要将列设为NULL,或NOW()。

复制代码 代码示例:

CREATE TABLE test (

'id' INT (3) UNSIGNED AUTO_INCREMENT,

'date1' TIMESTAMP (14),

'date2' TIMESTAMP (14),

PRIMARY KEY('id')

);

INSERT INTO test (id, date1, date2) VALUES (1, NULL, NULL);

INSERT INTO test SET id= 2;

+----+----------------+----------------+

| id | date1     | date2     |

+----+----------------+----------------+

| 1 | 20021114093723 | 20021114093723 |

| 2 | 20021114093724 | 00000000000000 |

+----+----------------+----------------+

->第一条指令因设date1、date2为NULL,所以date1、date2值均为当前时间第二条指令因没有设date1、date2列值,第一个TIMESTAMP列date1为更新为当前时间,而二个

TIMESTAMP列date2因日期不合法而变为“00000000000000”

复制代码 代码示例:

UPDATE test SET id= 3 WHERE id=1;

+----+----------------+----------------+

| id | date1     | date2     |

+----+----------------+----------------+

| 3 | 20021114094009 | 20021114093723 |

| 2 | 20021114093724 | 00000000000000 |

+----+----------------+----------------+

->这条指令没有明确地设定date2的列值,所以第一个TIMESTAMP列date1将被更新为当前时间:

复制代码 代码示例:

UPDATE test SET id= 1,date1=date1,date2=NOW() WHERE id=3;

+----+----------------+----------------+

| id | date1     | date2     |

+----+----------------+----------------+

| 1 | 20021114094009 | 20021114094320 |

| 2 | 20021114093724 | 00000000000000 |

+----+----------------+----------------+

->这条指令因设定date1=date1,所以在更新数据时date1列值并不会发生改变而因设定date2=NOW(),所以在更新数据时date2列值会被更新为当前时间此指令等效为 UPDATE

test SET id= 1,date1=date1,date2=NULL WHERE id=3;

因MySQL返回的 TIMESTAMP 列为数字显示形式,可以用DATE_FROMAT()函数来格式化 TIMESTAMP 列,如下:

复制代码 代码示例:

SELECT id,DATE_FORMAT(date1,'%Y-%m-%d %H:%i:%s') As date1,

DATE_FORMAT(date2,'%Y-%m-%d %H:%i:%s') As date2 FROM test;

+----+---------------------+---------------------+

| id | date1        | date2        |

+----+---------------------+---------------------+

| 1 | 2002-11-14 09:40:09 | 2002-11-14 09:43:20 |

| 2 | 2002-11-14 09:37:24 | 0000-00-00 00:00:00 |

+----+---------------------+---------------------+

SELECT id,DATE_FORMAT(date1,'%Y-%m-%d') As date1,

DATE_FORMAT(date2,'%Y-%m-%d') As date2 FROM test;

+----+-------------+-------------+

| id | date1    | date2    |

+----+-------------+-------------+

| 1 | 2002-11-14 | 2002-11-14 |

| 2 | 2002-11-14 | 0000-00-00 |

+----+-------------+-------------+

在某种程度上,你可以把一种日期类型的值赋给一个不同的日期类型的对象。

注意:值有可能发生一些改变或信息的损失:

1、如果将一个DATE值赋给一个DATETIME或TIMESTAMP对象,结果值的时间部分被设置为'00:00:00',因为DATE值中不包含有时间信息。

2、如果将一个DATETIME或TIMESTAMP值赋给一个DATE对象,结果值的时间部分被删除,因为DATE类型不存储时间信息。

3、尽管DATETIME, DATE和TIMESTAMP值全都可以用同样的格式集来指定,但所有类型不都有同样的值范围。

例如,TIMESTAMP值不能比1970早,也不能比2037晚,即,一个日期例如'1968-01-01',当作为一个DATETIME或DATE值时它是合法的,但它不是一个正确TIMESTAMP值!并且如

果将这样的一个对象赋值给TIMESTAMP列,它将被变换为0。

*当指定日期值时,当心某些缺陷: *

1、允许作为字符串指定值的宽松格式能被欺骗。例如,,因为“:”分隔符的使用,值'10:11:12'可能看起来像时间值,但是如果在一个日期中使用,上下文将作为年份被解释

成'2010-11-12'。值'10:45:15'将被变换到'0000-00-00',因为'45'不是一个合法的月份。

2、以2位数字指定的年值是模糊的,因为世纪是未知的。MySQL使用下列规则解释2位年值: 在00-69范围的年值被变换到2000-2069。 在范围70-99的年值被变换到1970-1999

注意:查询最近一段时间操作的记录,可以使用如下的查询语句(-60*10的单位是秒):

复制代码 代码示例:

SELECT * FROM table

WHERE  unix_timestamp(时间字段)>unix_timestamp(NOW())-60*10

ORDER BY 时间字段 desc

LIMIT 1000

mysql时间戳是什么意思_mysql中TIMESTAMP时间戳详解相关推荐

  1. mysql视图的更新 条件_mysql中视图更新详解

    视图的可更新性与视图中查询的定义是有关的 一.mysql中那些试图使不可更新的?以下类型的视图是不可更新的 1.包含以下关键字的sql语句:聚合函数(sum.min.max.count).distin ...

  2. mysql的explain怎么看_mysql中explain用法详解

    如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...

  3. explain mysql怎么用_mysql中explain用法详解

    EXPLAIN用于SELECT语句中的每个表返回一行信息.表以它们在处理查询过程中将被MySQL读入的顺序被列出 如果在select语句前放上关键词explain,mysql将解释它如何处理selec ...

  4. mysql数据库字段类型大全_mysql数据库字段类型详解

    MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...

  5. mysql慢查询的使用_mysql慢查询使用详解

    1 慢查询定义指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句.慢查询日志就是记录这些sql的日志. 2 开启慢查询日志 找到mysql配置文件my.cnf.在 ...

  6. mysql常见关键字的用法_MySQL 常用关键字用法详解

    MySQL 常用关键字用法详解 在开发工程中,操作数据库的时候经常会有不同类型的条件查询,除了使用where外,Mysql本身也提供了很多常用的关键字.本文主要介绍一些常用的关键字,像update.i ...

  7. mysql索引linke和等于_MySQL之SQL优化详解(三)

    摘要: 致索引失效而转向全表扫描存储引擎不能使用索引中范围条件右边的列mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描isnull,isnotnull也无法使用索引l ...

  8. mysql的所有聚合函数_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  9. mysql中数字格式化_mysql中格式化数字详解

    最近因为工作的需求,需要对mysql中数字进行格式化,但发现网上的资料较少,索性自己总结一下,方便自己也帮助有需要的朋友们,下面话不多说,来一起看看详细的介绍: 一.format函数: 格式化浮点数 ...

最新文章

  1. 从键盘输入的十个整数中的最大数和最小数
  2. TP5实现邮件发送(PHP 利用QQ邮箱发送邮件「PHPMailer」)
  3. C# 10 新特性 —— 命名空间的变化
  4. ASP.NET Core 3.x控制IHostedService启动顺序浅探
  5. C++学习之路 | PTA乙级—— 1071 小赌怡情 (15 分)(精简)
  6. Spring MVC 自定义验证器示例
  7. 写一个函数,输入一个十六进制,输出相应的十进制数。
  8. 九章算术卷第九 句股
  9. NodeJS stream 一:Buffer
  10. NTKO打开服务器上的文件
  11. 直线平面平行的判定和性质
  12. Hive窗口函数的使用
  13. 天猫精灵开发技能【2】
  14. 面试B站,结果面试官牵着一条狗出来面试我....这是什么操作??
  15. 基于STM32使用PWM调速控制直流电机
  16. 3dsmaxC4DbodypainterPS画贴图一、展开模型UV。
  17. Tensorflow2.0版本下如何实现Kronecker积
  18. R语言 RStudio快捷键
  19. 一个合格的java工程师应该必备的能力
  20. 02333软件工程——结构化方法

热门文章

  1. C++:引用类型(int )
  2. Hacking 开心网(虚拟朋友) with Mechanize
  3. JeecgBoot 低代码平台 2.4.5 版本发布,钉钉与企业微信集成版本
  4. SQL Server 2012 Express 和 SSMS 安装与配置
  5. 全球IT服务“十分天下有其一”,中软国际的底气来自何方?
  6. 【图像处理】基于matlab边缘检测 Sobel、Roberts、Prewitt
  7. Swift_代码混淆
  8. 面试官:说说MySQL中IN和OR的查询效率和区别
  9. 软件测试项目经验案例,软件测试心得与经验总结......
  10. 数字孪生3D可视化,人员定位系统助力企业数字化转型