MySQL 更新一条记录与原记录一样会怎么样?

在MySQL InnoDB引擎中,即使更新记录的值与原记录相同,也会执行完整的更新流程,包括加锁和更新。这可能导致其他会话的更新被阻塞,但并不影响数据的实际内容。通过锁实验和一致性读验证,可以排除不执行更新的选项。MySQL在执行更新前实际上检查了值,但在特定情况下无法判断是否需要修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL InnoDB引擎下,更新一条记录与原记录一样会怎么样?

我们创建了一个简单的表 t,并插入一行,然后对这一行做修改。


mysql> CREATE TABLE `t` (
`id` int(11) NOT NULL primary key auto_increment,
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB;
insert into t values(1,2);

这时候,表 t 里有唯一的一行数据 (1,2)。假设,我现在要执行:

mysql> update t set a=2 where id=1;

即要更新的记录 实际上与原记录一样

你会看到这样的结果:

image

结果显示,匹配 (rows matched) 了一行,修改 (Changed) 了 0 行。

仅从现象上看,MySQL 内部在处理这个命令的时候,可以有以下三种选择:

  1. 更新都是先读后写的,MySQL 读出数据,发现 a 的值本来就是,不更新,直接返回,执行结束;

  2. MySQL 调用了 InnoDB 引擎提供的“修改为 (1,2)”这个接口,但是引擎发现值与原来相同,不更新,直接返回;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值