更新列值为自身时MySQL是否会忽略该列的更新操作?
MySQL更新列值为自身时的行为
当执行像这样的SQL语句:
UPDATE TBExample A SET A.colExpl = A.colExpl
也就是把列更新为它当前的自身值时,MySQL不会忽略这个更新操作,具体表现如下:
- 数据本身不会有任何变化,但InnoDB会生成对应的undo和redo日志,消耗系统资源
- 如果该列绑定了UPDATE触发器,触发器会被正常触发执行
- 表的更新时间(
information_schema.tables里的UPDATE_TIME)会被刷新为当前时间 - 即便列上有索引,MySQL会检查索引但不会修改索引结构
如果想避免这种无意义的资源消耗,只在值真正变化时执行更新,可以给语句加上WHERE条件做判断:
UPDATE TBExample A SET A.colExpl = '目标值' WHERE A.colExpl != '目标值';
这样只有当列当前值和目标值不同时,才会执行更新操作。
内容的提问来源于stack exchange,提问作者DevGold
相关产品推荐
相关产品推荐

