当数据值相同时,Oracle是否更新列?

当数据值相同时,Oracle是否更新列?,oracle,sql-update,Oracle,Sql Update,如果我有一个名为NAME的列,它的值为“CLARK”,我运行一个update语句 update table1 set name = 'CLARK'; Oracle是否确实更新了列,还是因为值相同而忽略了update命令 我发现了这个问题(),第一个答案意味着即使值相等,也会发生更新。我也在SQLDeveloper中尝试过,它运行了,但我不知道是否真的发生了更新 提前感谢。是的,所有行都会更新,所有触发器都会触发,即使实际值没有更改。是的,Oracle会更新列,即使它相同 在一个非常简单的例子中

如果我有一个名为NAME的列,它的值为“CLARK”,我运行一个update语句

update table1 set name = 'CLARK';
Oracle是否确实更新了列,还是因为值相同而忽略了update命令

我发现了这个问题(),第一个答案意味着即使值相等,也会发生更新。我也在SQLDeveloper中尝试过,它运行了,但我不知道是否真的发生了更新


提前感谢。

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

是的,Oracle会更新列,即使它相同

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

  • 更新记录时,将在该记录上获得更新会话的锁
  • 更新记录时,表上的触发器将触发
更新的这一方面表明该列实际上已更新


当然,当值相同时,可能会有一些优化,但作为Oracle用户,这些优化是不可见的。

因此,如果更新确实发生,那么这是否意味着正在跟踪审核(我的理解是Oracle可以跟踪列级别的更改)那么,即使值没有改变,它也会被视为一个更新,并被审计部门跟踪?另外,这意味着如果一个“更新”真的没有“更新”,因为值是相同的,那么这应该在代码中说明,对吗?比如检查是否相等,如果值相等,则不更新?@BigFish我不确定Oracle审计是做什么的。