totimestamp mysql_mysql多个TimeStamp设置

2023-10-29

timestamp设置默认值是Default CURRENT_TIMESTAMP

timestamp设置随着表变化而自动更新是ON UPDATE CURRENT_TIMESTAMP

但是由于

一个表中至多只能有一个字段设置CURRENT_TIMESTAMP

两行设置DEFAULT CURRENT_TIMESTAMP是不行的。

还有一点要注意 CREATE TABLE `device` (

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

`toid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'toid',

`createtime` TIMESTAMP NOT NULL COMMENT '创建时间',

`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '最后更新时间',

PRIMARY KEY (`id`),

UNIQUE INDEX `toid` (`toid`)

)

COMMENT='设备表'

COLLATE='utf8_general_ci'

ENGINE=InnoDB;

像这个设置也是不行的。

原因是mysql会默认为表中的第一个timestamp字段(且设置了NOT NULL)隐式设置DEFAULAT CURRENT_TIMESTAMP。所以说上例那样的设置实际上等同于设置了两个CURRENT_TIMESTAMP。

分析需求

一个表中,有两个字段,createtime和updatetime。

1 当insert的时候,sql两个字段都不设置,会设置为当前的时间

2 当update的时候,sql中两个字段都不设置,updatetime会变更为当前的时间

这样的需求是做不到的。因为你无法避免在两个字段上设置CURRENT_TIMESTAMP

解决办法有几个:

1 使用触发器。

当insert和update的时候触发器触发时间设置。

网上有人使用这种方法。当然不怀疑这个方法的可用性。但是对于实际的场景来说,无疑是为了解决小问题,增加了复杂性。

2 将第一个timestamp的default设置为0

表结构如下:

CREATE TABLE `device` (

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

`toid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'toid',

`createtime` TIMESTAMP NOT NULL DEFAULT 0 COMMENT '创建时间',

`updatetime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',

PRIMARY KEY (`id`),

UNIQUE INDEX `toid` (`toid`)

)

COMMENT='设备表'

COLLATE='utf8_general_ci'

ENGINE=InnoDB;

这样的话,你需要的插入和更新操作变为:

insert into device set toid=11,createtime=null;

update device set toid=22 where id=1;

这里注意的是插入操作的createtime必须设置为null!!

虽然我也觉得这种方法很不爽,但是这样只需要稍微修改insert操作就能为sql语句减负,感觉上还是值得的。这也确实是修改数据库最小又能保证需求的方法了。当然这个方法也能和1方法同时使用,就能起到减少触发器编写数量的效果了。

3 老老实实在sql语句中使用时间戳。

这个是最多人也是最常选择的

表结构上不做过多的设计:

CREATE TABLE `device` (

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,

`toid` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'toid',

`createtime` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',

`updatetime` TIMESTAMP NOT NULL COMMENT '最后更新时间',

PRIMARY KEY (`id`),

UNIQUE INDEX `toid` (`toid`)

)

COMMENT='设备表'

COLLATE='utf8_general_ci'

ENGINE=InnoDB;

这样你就需要在插入和update的操作的时候写入具体的时间戳。

insert device set toid=11,createtime=’2012-11-2 10:10:10’,updatetime=’2012-11-2 10:10:10’

update device set toid=22,updatetime=’2012-11-2 10:10:10’ where id=1

其实反观想想,这样做的好处也有一个:current_timestamp是mysql特有的,当数据库从mysql转移到其他数据库的时候,业务逻辑代码是不用修改的。

ps:这三种方法的取舍就完全看你自己的考虑了。顺便说一下,最后,我还是选择第三种方法。

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

totimestamp mysql_mysql多个TimeStamp设置 的相关文章

随机推荐

  • C++之共享智能指针shared_ptr的实现

    目录 概念 使用标准库共享智能指针 共享智能指针底层实现 概念 共享指针是可以 由多个栈上智能指针对象 同时托管同一堆上资源的 因为shared ptr的内部实现引用计数来管理有多少智能指针指向了这块堆上资源 当一个共享智能指针出栈时 引用
  • 人脸建模1

    宝宝 把眼睛球体控制器和簇点的translate属性关联之后 选中眼睛一圈隔一个选一个面 给上nhair毛囊 删除结算器等 只留图中鼠标所在位置 毛囊分别对对应位置控制器父子约束 所有控制器做好之后一定要冻结 舌头控制器前面的组p给后面的盒
  • 二、C++语言进阶:动态库与静态库之函数篇

    2 动态库与静态库之函数篇 作用 分离编译 代码重用 分类 分类 作用 后缀 静态库 一个或多个 o目标文件归档在一个文件中 a 共享库 没有main函数的可执行文件 so 动态加载库 没有main函数的可执行文件 接口复合API so 2
  • 让树叶摇动起来

    Shader XW Tree TreeLeaf Simple Properties Color Main Color Color 1 1 1 1 clipAlpha clip Alpha Range 0 1 0 5 MainTex Base
  • Nginx 服务器

    简介 Nginx 是一款HTTP和反向代理服务器 它的内存占用少 能够支持高达五万个并发连接响应 其主要有三个功能 反向代理 负载均衡 反向代理 正向代理 就相当于 VPN 当你想要访问一个服务器但是由于某种原因不能直接访问时 可以去访问一
  • 如何使用 Vagrant 命令行工具创建和管理虚拟机

    创建和管理虚拟机曾经是一个乏味且耗时的过程 在不同的服务器上复制虚拟机也可能具有挑战性 如果必须复制多个虚拟机 情况会变得更加困难 但后来 Vagrant 出现了 它是一种通常与2 类虚拟机管理程序配合使用的命令行或 shell 工具 你可
  • QT从入门到实战x篇_06_信号和槽2:自定义信号和槽函数的创建及使用

    接上文 QT从入门到实战x篇 xx 信号和槽1 Qt中自带的信号和槽函数的使用方法本文主要介绍如何根据自身的功能需要 创建和使用自定义信号及槽函数 先写出一个功能需求 下课后 老师触发信号 饿了 学生响应信号 请客吃饭 1 建立老师类和学生
  • jquery ztree实现下拉树形框,json数据

    公司最近的项目需要用到树形下拉框 在网上找了挺多源码 最后还是采用了zTree来实现 因为代码的移植性比较高 而且数据的获取比较容易 废话不多说 直接上代码 index jsp
  • 轻量应用服务器腾讯云和阿里云哪家更好?

    轻量应用服务器阿里云和腾讯云哪个好 云服务器吧认为腾讯云轻量应用服务器还不错 腾讯云轻量服务器30元起 配置可选2核2G3M 2核2G4M 2核4G5M 4核8G12M 8核16G18M和16核32G28M 阿里云轻量应用服务器配置仅可以选
  • C语言函数大全-- w 开头的函数(1)

    w 开头的函数 1 1 wcscat 1 1 函数说明 1 2 演示示例 1 3 运行结果 2 wcschr 2 1 函数说明 2 2 演示示例 2 3 运行结果 3 wcscmp 3 1 函数说明 3 2 演示示例 3 3 运行结果 4
  • AHB接口总线仲裁1主多从细节。关于hready in和hready out信号的理解

    所有slaver 只要有1个hready out等于0 表示slaver没有准备好执行此拍操作 这时 所有slaver都不能执行此拍操作 以防止1主多从的AHB接口协议问题 所有slaver的hreadyout 需要与之后 提供给所有sla
  • linux下c++操作MySQL

    第一步 先在Linux中安装MySQL 第二步 在安装连接器 中端命令 sudo apt get install libmysqlclient dev 第三步写一个操作MySQL的c 代码保存退出 include
  • allegro如何对差分对单根网络进行等长调节

    选中要调整的差分线 再点击左栏的快捷按钮 此时options会弹出相关的调整s参数 设置好差分线参数 鼠标放在刚才选中的线上拉出一个方框 方框内就会显示线的形状变化 再次点击鼠标后 就会把线绘制成曲线形状 蛇形走线 在这里注意 如果调整走线
  • Redis缓存穿透, 击穿, 雪崩

    缓存穿透 缓存穿透是指用户想要查询一个数据 发现redis内存中没有 也就是没有缓存命中 于是向持久层数据库查询 发现也没有 于是本次查询失败 当用户很多的时候 缓存中都没有 于是都去请求持久层数据库 这会给持久层数据库造成很大压力 这就是
  • kafka 不支持读写分离的原因

    前段时间在看 kafka 相关内容 发现 kafka 所有的 读写流量都在主 partition 上 从 partition 只负责备份数据 那么为什么 kafka 从 partition 不跟其他中间件一样承接读流量 读写分离的初衷 读写
  • LoadRunner11 脚本关联操作-(学习中)

    一 首先了解关联的定义 服务器返回给客户端的是一些动态变化的值 客户端使用动态变化的值去访问服务器的时候 不能把这些值写死在脚本里面 而应该存放在一个变量里面 实时去获取服务器返回的动态值 简而言之 就是将录制脚本的静态值 再转换成动态值
  • 2021-1-30Linux学习纪要

    压缩和解压类 gzip gunzip gzip 用与压缩文件 gunzip 用于解压缩文件 特点把文件压缩之后原来的文件就没有了 同样的解压之后 压缩文件也没有了 zip 选项 xxx zip 将要压缩的内容 功能描述 压缩文件和目录的命令
  • 百川智能发布开源中英文大模型;GitHub调查显示92%的程序员使用AI编码工具;第一季度中国云服务支出增长6%丨每日大事件...

    数据智能产业创新服务媒体 聚焦数智 改变商业 企业动态 百川智能发布开源中英文大模型 6月15日 百川智能公司推出了70亿参数量的中英文预训练大模型 baichuan 7B baichuan 7B在C Eval AGIEval和Gaokao
  • 4.决策树

    决策树 一 决策树概述 训练阶段 根据训练数据构造决策树模型 在测试阶段 对数据进行分类 决策树重要的三个阶段 1 特征的选择 2 决策树的生成 3 决策树剪枝 决策树内部节点表示特征或者属性 叶节点表示类别 特征的选择 根据信息增益 ID
  • totimestamp mysql_mysql多个TimeStamp设置

    timestamp设置默认值是Default CURRENT TIMESTAMP timestamp设置随着表变化而自动更新是ON UPDATE CURRENT TIMESTAMP 但是由于 一个表中至多只能有一个字段设置CURRENT T