mysql中日期时间戳timestamp使用小结

2023-05-16

    timestamp时间戳类型在mysql数据库中比较常见,但是我们很容易忽视它的一些特征,这个我在面试中吃过亏,这里对他的一些用法和特点补充一下。也让自己加深印象。一般来说,我们使用日期,一般采用date,或者datetime,仅仅使用时间的话使用time。

    下面大致说明一下timestamp与datetime的区别:

     1、他们都可以表示日期时间,默认格式都是"YYYY-MM-DD HH:MM:SS",都可以通过now()或者'20200307225430'或者'2020-03-07 22:54:30'等值来设置值。

     2、他们表示的时间范围不同:timestamp表示的是世界标准时间1970-01-01 00:00:01 - 2038-01-19 03:14:07,对于我们中国北京时间(东八区)来说,需要在小时上+8,也就是1970-01-01 08:00:01 - 2038-01-19 11:14:07。而datetime时间范围是1000-01-01 00:00:00 - 9999-12-31 23:59:59。

     3、默认情况下,timestamp有默认值current_timestamp,也就是当前时间,然后每次修改的时候,会自动刷新。而datetime除非手动修改值,否则不会自动刷新。

   对于设置值,我们通过如下的sql执行结果来看看:

mysql> update users set name='aaaa',create_date=now(),modify_date=now();
Query OK, 3 rows affected (0.05 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> select * from users;
+----+------+---------------------+---------------------+
| id | name | create_date         | modify_date         |
+----+------+---------------------+---------------------+
|  1 | aaaa | 2020-03-07 22:56:53 | 2020-03-07 22:56:53 |
|  2 | aaaa | 2020-03-07 22:56:53 | 2020-03-07 22:56:53 |
|  3 | aaaa | 2020-03-07 22:56:53 | 2020-03-07 22:56:53 |
+----+------+---------------------+---------------------+
3 rows in set (0.00 sec)

mysql> update users set name='aaaa',create_date='20200307225730',modify_date=20200307225700;
Query OK, 3 rows affected (0.05 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> update users set name='aaaa',create_date='2020-03-07 22:57:30',modify_date='2020-03-07 22:57:00';
Query OK, 0 rows affected (0.05 sec)
Rows matched: 3  Changed: 0  Warnings: 0

mysql> select * from users;
+----+------+---------------------+---------------------+
| id | name | create_date         | modify_date         |
+----+------+---------------------+---------------------+
|  1 | aaaa | 2020-03-07 22:57:30 | 2020-03-07 22:57:00 |
|  2 | aaaa | 2020-03-07 22:57:30 | 2020-03-07 22:57:00 |
|  3 | aaaa | 2020-03-07 22:57:30 | 2020-03-07 22:57:00 |
+----+------+---------------------+---------------------+
3 rows in set (0.00 sec)

    对于时间timestamp的时间范围,我们可以通过如下的sql语句来感受一下:

    对于最小时间:

mysql> update users set modifydate = '19700101080000' where id = 7;
1292 - Incorrect datetime value: '19700101080000' for column 'modifydate' at row 1
mysql> update users set modifydate = '19700101080001' where id = 7;
Query OK, 0 rows affected

    对于最大时间: 

mysql> update users set modifydate = '20380119111408' where id = 6;
1292 - Incorrect datetime value: '20380119111408' for column 'modifydate' at row 1
mysql> update users set modifydate = '20380119111407' where id = 6;
Query OK, 0 rows affected

    下面我们重点说一下timestamp默认情况以及修改记录时刷新的情况。

    默认情况下,我们设置列类型为timestamp不用设置别的默认值,他的默认值就是current_timestamp,以后修改记录的时候,会刷新,我们通过建表语句来感受一下:

     

    默认情况下,我们设置modify_date的时候,就只是指定了timestamp,并没有后面的设置默认值,并在修改的时候指定当前时间。但是我们通过show create table users查看的 sql语句来看,他出现了是指默认值,以及修改记录的时候会刷新。

    我们插入一条记录,然后修改记录的名称,看看modify_date的变化:

    

    我们可以在定义表的时候,指定默认值,不指定on update 时刷新,可以让timestamp可以和datetime一样,一经设置,后面只能通过手动修改才能发生改变,而不是自动刷新。

     

    这时候,我们可以检验一下建表语句:

     

    这种情况之下,列定义后面没有on update current_timestamp字样。就不会在修改记录时,自动刷新当前时间了。

    还有一种情况是,我们在设置timestamp默认时间的时候,可以设置为0000-00-00 00:00:00,而不是当前时间,后面再修改记录的时候,自动刷新当前时间。虽然timestamp表示的时间范围是1970-01-01 00:00:01开始,但是默认值却可以设置为0000-00-00 00:00:00,也是很奇怪,不过确实可以。我们再修改表结构,插入记录并修改记录:

    

    我们不妨再次查看建表语句,发现这种设置timestamp的方式有什么特别的地方:

     

    我们看到,我们在建表的时候,仅仅指定on update current_timestamp,并没有设置默认值,但是他最后生成的语句中自带了默认值'0000-00-00 00:00:00'。

    总结一下就是,timestamp有以下特征:

    1、时间范围:1970-01-01 00:00:01 ----- 2038-01-19 03:14:07

    2、默认情况下,建表语句仅仅指定timestamp 等价于 timestamp default current_timestamp on update current_timestamp。 

他有默认值,就是当前时间,后续修改记录的时候,不用手动指定值,可以自动刷新。

     3、可以接受指定值,可以设置修改记录的时候,不刷新,这时候表现就和datetime一样。

     4、timestamp on update current_timestamp和timestamp not null default '0000-00-00 00:00:00' on update current_timestamp等价。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql中日期时间戳timestamp使用小结 的相关文章

  • 导入mysql数据库出错

    我导出我的数据库并导出到另一台计算机使用 phpmyadmin 但它错误 静态分析 分析过程中发现2处错误 意想不到的角色 靠近位置 53 的 无法识别的语句类型 位置 1 的 div 附近 SQL查询 div class error h1
  • 插入MYSQL时自动初始化GETDATE()

    类似问题 https stackoverflow com questions 17700239 mysql column automaticly current time of insert w3schools 也许有用的链接 http w
  • 选择列表包含非聚合列

    自从更新 MySQL 以来 我注意到以下查询失败 SELECT u p name as plan COUNT u id as totalprojects FROM users u LEFT JOIN plans p ON p id acce
  • 如何使用默认约束为mysql中的列创建随机数?

    DEFAULT 约束在接受字符串或当前日期值方面没有问题 我需要的是一个约束 每次创建实体时都会创建一个随机的 4 位数字 我尝试了以下代码 但它返回语法错误 ALTER TABLE client number ADD 代码 INT 4 D
  • 如何在mysql中设置“performance_schema on”?

    我想转performance schemaON 在 mysql 中收集统计信息 我怎样才能实现这个目标 以下指南是特定于 Linux 的 但应该很容易适用于 Windows 您必须检查 mysql 服务器二进制文件是否已编译为支持它 mys
  • MySQL - 通过部分单词匹配和相关性评分进行高效搜索(全文)

    如何进行 MySQL 搜索 既匹配部分单词 又提供准确的相关性排序 SELECT name MATCH name AGAINST math IN BOOLEAN MODE AS relevance FROM subjects WHERE M
  • 如何在函数内部使用 require_once [重复]

    这个问题在这里已经有答案了 你好 我想在函数内使用 require once 但不起作用 实际上我的页面中有三个函数我该怎么做 它在外面工作但不在函数内部 请问有谁吗 这是我的代码
  • 从 MySQL 返回结果时的数字顺序

    我的数据库表中有以下类型的标题 Topic 1 blah blah Topic 2 blah blah Topic 3 blah blah Topic 10 blah blah Topic 11 blah blah etc 选择查询将始终返
  • java.sql.SQLException:已经关闭

    我们有一个在 Tomcat 上运行的 Web 应用程序 带有 MySQL 后端 有一段时间一切都很好 然后突然我们开始遇到这个异常java sql SQLException Already closed 整个堆栈跟踪是 DEBUG org
  • 为什么有时自增列的值会有一个或多个间隙?

    我有一个这样的表 colors id color 1 red 2 blue id column is auto increment PK 当我向该表中插入一些新值时 有时会出现一些间隙id柱子 像这样的事情 INSERT INTO colo
  • MySQL 可以存储多少行?

    所以我是一个初学者 刚刚自学了几个月的MySQL 我在工作中总是使用 phpMyAdmin 我过去的工作只涉及大约 100k 行的表 所以没有什么大问题 然而 我的客户现在想要在表中存储大约 800 万行 MySQL phpMyAdmin
  • 当子查询具有组列时,MySQL 8 不使用 INDEX

    我们刚刚从 mariadb 5 5 迁移到 MySQL 8 一些更新查询突然变得很慢 经过更多调查 我们发现当子查询有组列时 MySQL 8不使用索引 例如 下面是一个示例数据库 桌子users维护每种类型用户的当前余额 表 帐户 维护每天
  • MySql 西班牙语字符数据

    我有一个包含西班牙语字符的数据库 为了填充数据库 我从字符编码 UTF 8 的客户端页面获取值 当我在 mySql 数据库中插入值时 行包含更改的数据 例如 如果我插入 M xico 数据库中的条目是 M xico 其影响是当我对指定 M
  • 需要 SQL 选择查询帮助

    我的问题类似于SQL选择组查询 https stackoverflow com questions 11407601 sql select group query 但模式发生了变化 我想要不同的结果 如下所述 给定链接的解决方案没有给我正确
  • 动态表单字段验证的数据库设计

    在我的应用程序中 我允许用户创建一个包含他们想要的任何 HTML 表单字段 例如文本输入 文本区域 选择等 的表单 我想让用户能够为每个字段定义 0 个或多个累积验证规则 最多可能有 25 个不同的验证规则 我应该如何建模 这是一个潜在的解
  • 删除除一行之外的所有具有重复值的行

    我有一个包含三列的表 KEY VALUE and LAST UPDATED 有重复的VALUE字段 我想删除所有具有相同的行VALUE和其他人一样except获取最新更新的信息 因此 如果表包含这些行 1 A 2013 11 08 2 B
  • 如何在同一列中选择多个值?

    我正在尝试在单个列中选择多个值 基本上我希望查询选择列下的所有内容family有价值观Software 1Y XI 1Y and P1 1Y 我正在运行这个查询 SELECT salesorder masterproduct family
  • 将我的本地数据库(Mysql)复制到远程数据库(phpmyadmin)

    My MySQL database local server is connected to a weather station The data are updated continuously on my local server My
  • mysql 准备好的语句错误:MySQLSyntaxErrorException

    我使用准备好的语句编写了选择语句 每次尝试运行都会出现此错误 我如何克服这个错误 我的jdbc连接器是mysql connector java 5 1 13 bin jar 我的代码 public Main add ad to getAdD
  • 如何查找列表/集合是否包含在另一个列表中

    我有一个产品 ID 列表 我想找出哪些订单包含所有这些产品 订单表的结构如下 order id product id 1 222 1 555 2 333 显然我可以通过 PHP 中的一些循环来做到这一点 但我想知道是否有一种优雅的方法可以纯

随机推荐

  • postgresql开启类似mysql查询语句后面跟\G一样按行展示列数据选项

    通常 xff0c 我们在使用数据库的时候 xff0c 为了让单条记录看着更清晰 xff0c 不会被控制台长度折断 xff0c 会将记录按行来展示 xff0c 在mysql数据库中 xff0c 查询语句后面跟上 G就可以实现这个效果 xff0
  • linuxmint下通过eclipse安装android开发环境sdk,adt并新建与启动项目各种踩坑

    最近安装了linuxmint19 2系统 xff0c 这个系统是ubuntu系列 xff0c 适合桌面操作系统 xff0c 据说比ubuntu好 可以先看看系统的一些特征 xff1a 这里的系统设置 xff0c 很像mac系统 xff0c
  • 安卓手机开启开发者选项

    一般我们将安卓手机通过数据线连接到电脑 xff0c 会提示将手机用于干什么 xff0c 有传输文件选项 xff0c 充电选项 xff0c 开发者调试选项 我们选择充电之后 xff0c 再不会出现这个提示 有的手机开发者选项不会显示在设置界面
  • webpack前端项目构建框架

    前端项目构建框架有很多 xff0c 常见的有grunt xff0c gulp xff0c 为什么还有webpack呢 xff1f 前端构建工具一般都是将js合并压缩 xff0c css合并压缩 xff0c 以达到减少体积 xff0c 提高加
  • 两轮差速小车循线控制原理分析

    硬件资料设定 xff1a 小车驱动来自于两个相同的电机 xff0c 转向依靠两轮差速实现 xff0c 小车前后左右安装超声波传感器 xff0c 前后各一个 xff0c 左右各两个 xff1b 功能目标 xff1a 假设小车左侧有墙壁 xff
  • webpack前端项目构建框架续

    在前一篇文章中 xff0c 介绍webpack构建普通web项目 xff0c 一般而言没有太大的意义 xff0c 我们需要使用webpack构建es6 xff0c react等这些新的语法或者特性的项目 xff0c 因为涉及了很多语法的转换
  • html页面报错Uncaught SyntaxError: Cannot use import statement outside a module

    如题所示 xff0c 在我们学习es6的时候 xff0c 使用export导出模块 xff0c 使用import导入模块的语法时 xff0c 我们需要将我们在html中声明的标签 lt script gt lt script gt 类型ty
  • redux入门示例

    redux是一个将ui与数据操作分离的框架 xff0c 可以与vue或者react配合使用 保证了数据集中修改 xff0c 然后渲染 xff0c 可以防止用户在外部随意修改state状态树 redux利用store来统一管理state xf
  • redux入门示例续

    前面一篇介绍了利用redux框架来实现计数器的例子 xff0c 了解了redux设计思想 xff0c 他将ui响应与数据更改分离 xff0c 集中处理状态变更 xff0c 然后渲染到页面 xff0c 当有用户操作的时候 xff0c ui响应
  • react项目启动报错:Error: ENOSPC: System limit for number of file watchers reached

    如题所示 xff0c 最近在使用npm start启动react项目的时候 xff0c 经常会报这个错误 xff0c 出错原因大致意思是文件监控数量超过了系统限制 其实就是打开的文件过多导致的 xff0c 不管是什么文件 xff0c 只要有
  • Support for the experimental syntax 'decorators-legacy' isn't currently enabled

    如题 xff0c 出现这个错误 xff0c 是因为react项目中使用了 64 语法的装饰器 xff0c 而我们项目的一些配置没有设置正确导致的 为了使用装饰器 xff0c 需要修改如下三处配置 xff1a 1 运行依赖 npm insta
  • react hooks useEffect副作用钩子使用

    react框架开发作为入门 xff0c 我们首先学到的是自定义组件 xff0c 然后编写相关处理逻辑 xff0c 绑定事件等等 一般自定义组件 xff0c 我们是通过编写一个class继承React Component xff0c 然后编写
  • 使用mocha与should库做nodejs单元测试

    nodejs是服务端开发 xff0c 他也可以做单元测试 xff0c 只不过 xff0c 这个单元测试一般是针对某一个文件或者一个模块而言 xff0c 我们经常看到github上的很多项目各自的文件夹中都有很多xxx test js这样的文
  • javascript reduce()方法示例

    reduce在大数据框架mapreduce中是一个合并的过程 xff0c 将所有的数据 xff0c 按照一定的规则合并 xff0c 一步步缩小范围 xff0c 最后合并为一个最大的集合或者对象 在javascript中 xff0c redu
  • 无人驾驶小车调试笔记(六)-- 车轮校准

    简介 xff1a 小车的动力完全来自于两个电机带动的车轮 xff0c 在理想状态下 xff0c 给两个电机同样的驱动参数 xff0c 两个车轮会以同样的转速带动小车直线行驶 xff0c 而实际情况是每个电机可能都会有个体差异 xff0c 也
  • 电力电子技术仿真-单项桥式不可控整流电路(无滤波电容)

    电路模型如下图所示 电路元器件与参数设置如下所示 xff1a Powergui xff1b Linear Transformer xff1b Current Measurement xff1b Voltage Measurement xff
  • git命令行切换到某一个提交版本的分支

    通常 xff0c 我们需要在命令行下切换 分支 xff0c 一般而言 xff0c 我们将远程代码克隆 git clone http xxx com project 到本地之后 xff0c 切换分支使用git checkout b branc
  • linuxmint下gcc编译报错:zlib version 1.2.1 or higher is required

    如题所示 xff0c 在linuxmint系统上通过gcc编译一个工具 xff0c 报错 xff1a 通过dpkg l命令查看系统的zlib库 xff0c 是有zlib1g xff0c 这个就是最新的 很多地方说要安装zlib1g dev
  • MFC与第三方类库CWebPage开发javascript函数调用示例

    今天思索一个问题 xff0c 想着怎么用c 43 43 调用百度地图 xff0c 结果网上有一篇文章介绍了如何使用MFC项目结合CWebPage来调用百度地图 看了整篇博客 xff0c 思路很清晰 xff0c 但是看下来 xff0c 其实就
  • mysql中日期时间戳timestamp使用小结

    timestamp时间戳类型在mysql数据库中比较常见 xff0c 但是我们很容易忽视它的一些特征 xff0c 这个我在面试中吃过亏 xff0c 这里对他的一些用法和特点补充一下 也让自己加深印象 一般来说 xff0c 我们使用日期 xf