当前位置: 首页 > news >正文

mysql之timestamp字段自动更新问题

mysql之timestamp字段自动更新

问题:mysql有一个字段是timestamp类型,发现set更新其他字段,这个timestamp也会自动更新。

问题分析:
这是mysql timestamp字段特性:
MySQL中有这样的一个默认行为:一行数据中的某些列被更新了,如果这一行中有timestamp类型的列,那么这个timestamp列会自动更新时间戳。这个行为是由explicit_defaults_for_timestamp参数控制的。在实际使用过程中经常会遇到一些非预期的异常情况,这给数据库使用过程带来诸多不便。

timestamp 列不可以用程序设置值,在插入记录时不需要指定 timestamp 字段的名称和 timestamp 字段的值,你只需要在设计表的时候添加一个 timestamp 字段即可,插入后该字段的值会自动变为当前系统时间。

以后任何时间修改表中的记录时,对应记录的 timestamp 值会自动被更新为当前的系统时间。

结论: timestamp 类型适合用来记录数据的最后修改时间,因为只要你更改了记录中其他字段的值,timestamp字段的值都会被自动更新。

解决方法:
你可以修改为datetime类型,datetime类型字段你不专门配置,默认不会自动更新。
datetime 类型适合用来记录数据原始的创建时间,因为无论你怎么更改记录中其他字段的值,datetime 字段的值都不会改变,除非你手动更改它。

最佳实践:每个表都应该有一列使用 timestamp 用于自动记录更新时间,这一列不需要在 Java 类中出现,如果需要记录创建时间,则使用 datetime。

MySQL TIMESTAMP简介

MySQL TIMESTAMP是一种时态数据类型,它包含日期和时间的组合。 TIMESTAMP字段YYYY-MM-DD HH:MM:SS的格式 其被固定在19个字符。 TIMESTAMP值的范围 ‘1970-01-01 00:00:01’ UTC为’2038-01-19 03:14:07’ UTC。 当你插入一个TIMESTAMP值到一个表时,MySQL从您连接的时区为UTC存储将其转换。

当你查询一个TIMESTAMP值时,MySQL的UTC值转换回到你的连接的时区。请注意,此转换不会发生在其他时态数据类型中,例如DATETIME。

默认情况下,连接时区是MySQL数据库服务器的时区。连接到MySQL数据库服务器时,可以使用不同的时区。 当您检索TIMESTAMP客户端在不同时区插入的值时,您将获得一个与存储在数据库中的值不同的值。只要您不更改时区,就可以获得与TIMESTAMP存储时相同的值。

http://www.dtcms.com/a/259826.html

相关文章:

  • ​​深入解析 Vue 中的 pathRewrite:路径重写规则详解​​
  • 汽车一键启动升级手机控车
  • 技术选型:时序数据库(三)
  • vue 实现多区域图片拖拽
  • Neo4j2.0.1桌面端使用教程(简化版)
  • 关于如何在 Git 中切换到之前创建的分支的方法
  • Redis主从架构哨兵模式
  • 生僻字处理工具类
  • 【附源码】旅游网站系统设计与实现+SpringBoot + Vue (前后端分离)
  • ArrayList和LinkedList详解
  • python打卡day56@浙大疏锦行
  • 时间同步 gptp ptp
  • 【软件系统架构】系列四:嵌入式软件-NPU(神经网络处理器)系统及模板
  • 如何解决本地DNS解析失败问题?以连接AWS ElastiCache Redis为例
  • LabVIEW气密性测试系统
  • 川翔云电脑全新上线:三维行业高效云端算力新选择
  • Solidity 从 0 到 1 |Web3 开发入门免费共学营
  • Launcher3 中的 MVC 架构类解析
  • 基于HAR包转换为pytest用例的测试技术实战
  • 鸿蒙 FoldSplitContainer 解析:折叠屏布局适配与状态管理
  • 黑马ReactDay02
  • XA、AT、TCC、SAGA二阶段提交分布式事务学习笔记
  • Hive3.1.3加载paimon-hive-connector-3.1-1.1.1.jar报错UnsatisfiedLinkError
  • Java6.26
  • 如何将视频从 iPhone 发送到 Android 设备
  • iOS App 上架流程工具链解析:开发者视角下的协作实践总结
  • 本地部署开源时间跟踪工具 Kimai 并实现外部访问( Windows 版本)
  • bug复盘:MCP SSE Client 生命周期问题之context.Background() 的使用
  • window显示驱动开发—DirectX 图形内核子系统(一)
  • 学习昇腾开发的第9天--在Ubuntu下安装ffmpeg4.2.11