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

MySQL 中 CURRENT_TIMESTAMP 到底取的是 INSERT 时间,还是 COMMIT 时间?

目录

    • 结论
    • 验证
      • 实验 1:INSERT 后 sleep 10 秒再 COMMIT
      • 实验 2:让 INSERT 语句自身慢 10 秒

一个表的updated_ts字段定义如下:
updated_tstimestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP

执行insert 或 update的时候 updated_ts 取的是 INSERT 时间,还是 COMMIT 时间?

结论

先给结论:
updated_ts 取的是 INSERT 语句执行时的当前时间,不是 COMMIT 的时间。
也就是说:

BEGIN;INSERTINTOservicegroup(...)VALUES(...);-- 这里决定 updated_ts-- 中间耗时约 10sCOMMIT;-- 不会重新刷新 updated_ts

如果 INSERT 时没有显式指定 updated_ts,这一列会用:
DEFAULT CURRENT_TIMESTAMP
自动填充。ON UPDATE CURRENT_TIMESTAMP只会在后续UPDATE该行时触发,不会因为事务COMMIT而触发。

所以结论是:

  • updated_ts ≈ INSERT 语句实际执行时的时间
  • 不是事务开始时间,除非 INSERT 就在事务开始时执行
  • 不是 commit 时间
  • 如果 INSERT 本身是长语句,例如 INSERT … SELECT … 跑了 10s,一般按该语句开始执行时的时间取值,同一条语句插入的多行通常时间一致
  • 如果显式写了 updated_ts,则以显式值为准

简单例子:

BEGIN;INSERTINTOdatabase_servicegroup(...)VALUES(...);-- 10:00:00DOSLEEP(10);COMMIT;-- 10:00:10

最终 updated_ts 通常是 10:00:00 左右,而不是 10:00:10。

验证

临时表:

CREATETABLEcodex_updated_ts_test(idINTNOTNULLAUTO_INCREMENTPRIMARYKEY,nameVARCHAR(50)NOTNULL,updated_tsTIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP);

实验 1:INSERT 后 sleep 10 秒再 COMMIT

结果关键数据:

after_insert: 2026-07-10 15:01:15 updated_ts: 2026-07-10 15:01:15 after_commit: 2026-07-10 15:01:25 差值: 10 秒

说明:updated_ts 是 INSERT 时的时间,不是 COMMIT 时间。

实验 2:让 INSERT 语句自身慢 10 秒

执行类似:

INSERTINTOcodex_updated_ts_test(name)SELECT'slow_insert_statement'FROM(SELECTSLEEP(10))s;

结果关键数据:

before_insert: 2026-07-10 15:01:25 after_insert: 2026-07-10 15:01:35 updated_ts: 2026-07-10 15:01:25 差值: 10 秒

结论验证一致:updated_ts DEFAULT CURRENT_TIMESTAMP 在 INSERT 时取的是 INSERT 语句开始执行时刻,不是 INSERT 结束时刻,也不是事务 COMMIT 时刻。

http://www.jsqmd.com/news/1169253/

相关文章:

  • Cesium 曲线漫游教程
  • DiffSinger:5分钟快速上手的AI歌声合成终极指南
  • 洛雪音乐音源终极指南:免费获取全网最新音乐资源
  • 为什么选择openEuler Raspberry Pi Kernel:10个树莓派开发者必须知道的优势
  • AI辅助合规审计:自动检查数据库配置是否满足等保和GDPR要求
  • 实验7-3 自媒体运营可视化探索
  • ZFX山海证券外汇:围绕规范化意识与用户体验路径的清单评估
  • Hadoop 2.6.5 伪分布式环境配置:3个核心配置文件修改与端口9000避坑指南
  • 5步让老Mac焕发新生:OpenCore Legacy Patcher终极指南
  • 从零手搓 Linux 容器网络:跟着 Ivan Velichko 跑通 netns → veth → bridge → NAT 全链路
  • 并发控制3大协议实战对比:从2PL到MVCC的隔离级别演进
  • Windows系统中的Git基本操作命令使用教程
  • PyTorch 2.12 Tensor 创建全解析:5种方法对比与3个性能陷阱
  • Cursor API 配置失效全链路诊断指南(从VS Code插件到AI模型上下文传递的7层验证)
  • LV3296与PIC18LF4685嵌入式数据采集系统设计
  • 6款高效降AIGC网站 降痕效果拉满 - 降AI小能手
  • 高精度ADC ADS127L11与PIC18F66K40的工业数据采集方案
  • HarmonyKit | 鸿蒙开发:DevEco Studio 编译调试与性能优化
  • 2026深圳福田区本地正规空调拆装服务商全盘点,合规资质认证机构实力对比,避坑指南及高口碑可对接商家推荐 - 深圳家顺兴搬家
  • 工业绿色生命:01 绿色自动化是谁?从节能到碳足迹全生命周期
  • DeepSeek V4 Pro以95.19分居首:2026-07-08 Smoke快测数据简报
  • 2026年AI量化工具怎么选,先定位学习开发还是执行
  • Navicat重置脚本终极指南:如何在Mac上实现数据库工具无限试用
  • 数据库并发控制3大方案对比:悲观锁、乐观锁与MVCC在10万QPS下的性能差异
  • 07-Python 输入 input 输入数据类型转换
  • 多件闲置奢侈品一同出手,哪种回收方式收益与安全更有保障? - 讯息早知道
  • UE4随机数高效使用指南:从FMath::RandRange到FRandomStream实战
  • 15分钟搞定黑苹果:OpCore-Simplify图形化EFI配置终极指南
  • 2026年7月最新成都帝舵官方售后客服服务电话及地址网点大全 - 帝舵中国官方服务中心
  • Java面试前需要掌握的三个关键知识点