【问题标题】:Does Oracle update columns when the data values are the same?当数据值相同时Oracle会更新列吗?
【发布时间】:2025-12-20 19:20:33
【问题描述】:

如果我有一个名为 NAME 的列并且它的值为“CLARK”并且我运行一个更新语句

update table1 set name = 'CLARK';

Oracle 是否真的更新了列,还是因为值相同而忽略了更新命令?

我发现了这个问题 (Oracle, how update statement works),第一个答案暗示即使值相等也会发生更新。我也在 SQL Developer 中尝试过,它运行了,但我不知道是否真的发生了更新。

提前致谢。

【问题讨论】:

    标签: oracle sql-update


    【解决方案1】:

    是的,即使列相同,Oracle 也会更新该列。

    在一个非常简单的例子中,这没什么区别。但请考虑以下几点:-

    • 更新记录时,会在该记录上获得锁定以用于更新会话,
    • 更新记录时,会触发表上的触发器

    更新的这方面表明该列实际上已更新。

    当然,当值相同时,也许会有一些优化,但这些优化对于 Oracle 用户来说是不可见的。

    【讨论】:

    • 因此,如果确实发生了更新,那么这是否意味着如果正在跟踪审计(我的理解是 Oracle 可以在列级别跟踪更改),那么即使值没有更改,它也会被视为更新并被审计跟踪?此外,这意味着如果“更新”真的没有“更新”,因为值相同,那么这应该在代码中说明,对吧?就像检查相等而不更新值是否相等?
    • @BigFish 我不确定 Oracle 审计的作用。
    【解决方案2】:

    是的,所有行都更新了,所有触发器都被触发了,即使实际值没有改变。

    【讨论】: