首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

不更新行数据的InnoDB CURRENT_TIMESTAMP update

InnoDB是MySQL数据库中的一种存储引擎,它支持事务和行级锁定,被广泛用于云计算领域的应用开发中。在InnoDB中,使用CURRENT_TIMESTAMP关键字可以将一个字段的默认值设置为当前的时间戳。

针对你提到的问题,"不更新行数据的InnoDB CURRENT_TIMESTAMP update",可以理解为如何在使用InnoDB存储引擎时,不更新行数据的情况下使用CURRENT_TIMESTAMP关键字。

在InnoDB中,如果一个表的某个字段使用了CURRENT_TIMESTAMP作为默认值,并且该字段没有被包含在UPDATE语句中,那么在执行UPDATE操作时,该字段的值不会被更新,仍然保持为插入时的时间戳。

这种特性在某些场景下非常有用,例如记录数据的创建时间或者最后修改时间。通过设置字段的默认值为CURRENT_TIMESTAMP,可以确保在插入新行时自动记录当前时间戳,而在更新行数据时不会修改该字段的值。

以下是一个示例表结构:

代码语言:txt
复制
CREATE TABLE example_table (
    id INT PRIMARY KEY AUTO_INCREMENT,
    data VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);

在上述示例中,created_at字段使用了CURRENT_TIMESTAMP作为默认值,表示在插入新行时自动记录当前时间戳。而updated_at字段同样使用了CURRENT_TIMESTAMP作为默认值,并且通过ON UPDATE CURRENT_TIMESTAMP设置了在更新行数据时自动更新为当前时间戳。

对于不更新行数据的情况,只需在UPDATE语句中不包含updated_at字段即可,例如:

代码语言:txt
复制
UPDATE example_table SET data = 'new data' WHERE id = 1;

执行上述UPDATE语句后,updated_at字段的值不会被修改,仍然保持为之前的时间戳。

腾讯云提供了MySQL数据库的云服务,可以使用腾讯云的云数据库MySQL来支持InnoDB存储引擎和相关功能。具体产品介绍和相关链接如下:

  • 产品名称:腾讯云数据库MySQL
  • 产品介绍链接:https://cloud.tencent.com/product/cdb_mysql
  • 文档链接:https://cloud.tencent.com/document/product/236

请注意,以上答案仅针对InnoDB存储引擎和相关问题,不涉及其他云计算品牌商。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

hibernate persist update 方法没有正常工作(不保存数据更新数据)

在代码实现中使用hibernate persit()方法插入数据数据库,使用hibernate update()方法更新数据。问题是执行这两个方法没有报错,但是也没有插入数据或者更新数据。...原因 hibernate persist()以及update()方法只有事务执行flush()或者commit()方法,才将数据写入数据库。...使用spring aop配置事务,从输出结果可以看出,数据没有插入数据库。...第二个例子test2()方法,调用save2()方法,persist()方法被包围在spring aop配置事务和session2事务中(事务有提交),从输出结果可以看出,数据没有插入数据库。...第三个例子test3()方法,persist()方法被包围在spring aop配置事务和session1事务中(事务有提交),从输出结果可以看出,数据成功插入数据库。

2.3K10

tk.mybatis通用插件updateByPrimaryKeySelective无法自动更新ON UPDATE CURRENT_TIMESTAMP解决办法

updateByPrimaryKeySelective原理,是根据entity对象属性值,是否为null,如果为null,则最终生成update语句里,将忽略该列,否则会更新该列。...entity从数据库里取出来时,DatachangeLasttime属性上已经有值了,不为null,所以更新时,又把这个旧值给update回去了!...TEST,这一不会被更新(datachange_lasttime列仍是旧值) sample.setEmpcode("TEST"); //人为更新成null,以便让mybatis...,如果empcode这列在数据库里,这行上旧值已经是TEST,java代码又把更新成TEST,即:这行数据没有变化,updateByPrimaryKeySelective在java代码里返回影响行数...,仍然是1 ,但是在mysql里裸跑sql的话,影响行数是0,即:数据库层面这行没有更新,datachange_lasttime列当然仍是旧值(这倒也合理,毕竟数据更新前后数据一样,所以mysql更新也说得过去

3.2K10

HIVE中数据更新(update)操作实现

数据更新是一种常见操作,然后数据仓库概念一般要求数据是集成、稳定。HIVE作为一种分布式环境下以HDFS为支撑数据仓库,它同样更多要求数据是不可变。...然而现实很多任务中,往往需要对数据进行更新操作,经查,Hive自0.11版本之后就提供了更新操作。于是想着试验一下,看看HIVE更新操作和性能。 按照网上办法进行设置.   ...写入更新操作命令: update ** set name ='aaa' where id =1; 得到结果如下: 似乎这样操作,HIVE对UPDATE操作就非常好。...其实经过实验,发现HIVE更新机制速度非常慢,在一个仅仅为6数据测试,其花费时间也要180S,这种效率肯定是无法忍受。猜测其原因可能需要读出原有的表,进行更新,然后再写回HDFS?...另外一个非常头疼事情是,这种HIVE环境下支持ACID表,竟然只能在HIVE内部才能访问到,而在BEELINE或者SPARK环境下,居然是无法获得数据。或者对外不提供接口。

15K10

老大问我:“建表为啥还设置个自增 id ?用流水号当主键不正好么?”

(3) COMMENT '创建时间', `update_time` datetime(3) NOT NULL DEFAULT current_timestamp(3) ON UPDATE current_timestamp...为什么要添加主键 主键可以唯一标识这一数据,从而保证在删除更新操作时,只是操作这一数据。 索引需要,每个 InnoDB 表又有一个特殊索引,即聚簇索引,用来存储行数据。..." 索引物理结构 InnoDB 使用 B+ 数数据结构,根据聚簇索引值(主键/UNQIUE/或者自己生成)构建一颗 B+ 树,叶子节点中存放行记录数据,所以每个叶子节点也可以叫数据页。...图:《MySQL 技术内幕 InnoDB 存储引擎》 数据插入 当数据插入时,InnoDB 会使页面 1/16 空闲,以备将来插入和更新索引记录。...A: 可以唯一标识一数据,在 InnoDB 构建索引树时候会使用主键。 自增 id 是顺序,可以保证索引树上数据比较紧凑,有更高空间利用率以及减少数据分裂合并等操作,提高效率。

1.8K20

面试官:MySQL 唯一索引为什么会导致死锁?

,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值执行UPDATE;如果不会导致重复问题,则插入新,跟普通insert into一样。...使用insert into,你必须具有insert和update权限 如果有新记录被插入,则受影响值显示1;如果原有的记录被更新,则受影响值显示2;如果记录被更新前后值是一样,则受影响行数值显示...死锁 insert … on duplicate key 在执行时,innodb引擎会先判断插入是否产生重复key错误,如果存在,在对该现有的加上S(共享锁)锁,如果返回该行数据给mysql,然后...replace into和insert … on duplicate key update,都是替换原有的重复数据,区别在于replace into是删除原有的后,在插入新,如有自增id,这个会造成自增...id改变;insert … on duplicate key update在遇到重复行时,会直接更新原有的,具体更新哪些字段怎么更新,取决于update语句。

1.4K20

老大问我:“建表为啥还设置个自增 id ?用流水号当主键不正好么?”

(3) COMMENT '创建时间', `update_time` datetime(3) NOT NULL DEFAULT current_timestamp(3) ON UPDATE current_timestamp..., KEY `idx_update_time` (`update_time`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET...为什么要添加主键 主键可以唯一标识这一数据,从而保证在删除更新操作时,只是操作这一数据。 索引需要,每个 InnoDB 表又有一个特殊索引,即聚簇索引,用来存储行数据。...每个数据页大小默认为 16k,支持自定义。 图:《MySQL 技术内幕 InnoDB 存储引擎》 数据插入 当数据插入时,InnoDB 会使页面 1/16 空闲,以备将来插入和更新索引记录。...A: 可以唯一标识一数据,在 InnoDB 构建索引树时候会使用主键。 自增 id 是顺序,可以保证索引树上数据比较紧凑,有更高空间利用率以及减少数据分裂合并等操作,提高效率。

80530

数据库设计规范,需要注意几点!

引擎规范 非特殊情况下,默认选择Innodb,支持事务、级锁,并发性能更好。...编码规范 UTF-8 表设计规范 必须有主键 主键递增,可提高写入性能,减少碎片 禁止使用外键 降低表之间耦合,不要涉及更新操作级联,并发高情况极度影响SQL性能 字段设计规范 必须有注释 不然鬼才知道代表什么意思...update_time(updated_at):更新时间,默认current_timestamp,on update current_timestamp is_deleted:逻辑删除标志位,视情况选择...禁止使用text\blob 浪费磁盘和内存空间,影响数据库性能 金额禁止使用小数存储 尽量使用分或者更小单位用整数存储,否则精度问题会很麻烦 命名规则 表、列 使用业务模块开头,如tb_order...COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

46820

时间戳,这样用就对了

前言: 时间戳字段在MySQL中经常使用到,比如需要记录一数据创建时间或修改时间时,我们通常会使用时间戳即timestamp字段。...time_zone参数指定了数据库时区,time_zone分为全局级别和会话级别,可动态更新,默认为SYSTEM,表示数据库服务时区与系统时区相同。...: TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 在创建新记录和修改现有记录时候都对这个数据列刷新 TIMESTAMP...`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 即每一数据都包含创建时间和修改时间,程序写入数据并不需要显示指定创建时间和修改时间,由默认值自动填充。...对于时间戳字段,插入数据时建议指定或插入now()函数。 explicit_defaults_for_timestamp参数建议默认为OFF。

87130

MySQL走索引情况分析

查询结果集是原表中大部分数据数据库查询命中索引时,数据库会首先利用索引列值定位到对应数据节点。这个数据节点上记录了对应数据标识符(Row Identifier)。...然而,如果查询需要获取该行其他列数据,就需要进行回表操作。 在回表操作中,数据库会使用标识符再次访问数据节点或磁盘上实际数据,以获取完整数据。这个过程被称为回表。..., `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `type` tinyint...innodb统计信息并不是实时统计更新,如果统计信息和实际索引信息差异很大,就会导致优化器计算各个索引成本后,做出非预期选择。...出现这种现象场景是:当有大量数据在短时间内落库时,Innodb还没更新统计相关信息,此时来了一个查询,MySQL会基于历史数据做出错误判断:当前表数据量少,走索引更高效。

27610

必看数据库使用规范

【建议】核心表(如用户表)必须有行数据创建时间字段create_time和最后更新时间字段update_time,便于查问题。...COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP...因为union all不需要去重,节省数据库资源,提高性能。 【强制】禁止跨dbjoin语句。 【建议】建议使用子查询,建议将子查询SQL拆开结合程序多次查询,或使用join来代替子查询。...建议】事务里包含SQL超过5个 因为过长事务会导致锁数据较久,MySQL内部缓存、连接消耗过多等问题。...【建议】事务里更新语句尽量基于主键或unique key,如update … where id=XX; 否则会产生间隙锁,内部扩大锁定范围,导致系统性能下降,产生死锁。

86150

MySQL走索引情况分析

查询结果集是原表中大部分数据数据库查询命中索引时,数据库会首先利用索引列值定位到对应数据节点。这个数据节点上记录了对应数据标识符(Row Identifier)。...然而,如果查询需要获取该行其他列数据,就需要进行回表操作。 在回表操作中,数据库会使用标识符再次访问数据节点或磁盘上实际数据,以获取完整数据。这个过程被称为回表。..., `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `type` tinyint...innodb统计信息并不是实时统计更新,如果统计信息和实际索引信息差异很大,就会导致优化器计算各个索引成本后,做出非预期选择。...出现这种现象场景是:当有大量数据在短时间内落库时,Innodb还没更新统计相关信息,此时来了一个查询,MySQL会基于历史数据做出错误判断:当前表数据量少,走索引更高效。

22760

如何判断MySQL实例出了问题

查表判断 为了解决select 1问题,我们可以在系统库(mysql库)里面创建1个表,比如命名为health_check,里面只放一数据,如下: create table health_check...但是假设磁盘空间使用率达100%,由于我们更新需要些日志,因此所有的更新语句都会被阻塞,但是查表还是可以(正常读数据)。...更新判断 update mysql.health_check set t_modified = now(); 对于主备库我们都需要使用上述语句进行检测,但是如果主备关系为双M结构,说明两个节点会同步彼此...为了让主备之间更新产生冲突,可以在mysql.health_check放入多行数据,并将两个节点server_id放入表中,如下: create table health_check ( id bigint...not null primary key , t_modified timestamp NOT NULL default CURRENT_TIMESTAMP ) engine=InnoDB; /*

1.3K20

MySQL索引

MySQL索引可以用于以下操作: 快速查找与“WHERE”语句匹配数据。 排除数据。如果在多个索引之间进行选择,MySQL通常使用找到行数最少索引(最具选择性索引)。...在执行联结操作时,从其他表获取数据。 查找特定索引列“key_col”“MIN()”或“MAX()”值。...` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`payment_id`),...维护InnoDB索引统计信息 MySQL优化器利用索引分布统计信息决定查询时使用索引及联结顺序,当表中超过10%变更后,会自动更新统计信息。...此外,用户也可以通过“ANALYZE TABLE”语句手动更新统计信息。InnoDB将统计信息持久化存储在“mysql.innodb_index_stats”表中。

15010
领券