2013-12-19 46 views
2

如果我有一列稱爲名稱,但「克拉克」的價值,我運行一個更新語句Oracle在數據值相同時更新列嗎?

update table1 set name = 'CLARK'; 

Oracle是否實際更新列或它忽略update命令,因爲值是相同的?

我發現這個問題(Oracle, how update statement works),第一個答案意味着即使值相等也會發生更新。我也在SQL Developer中嘗試過它,但它運行但我不知道是否真的發生了更新。

在此先感謝。

回答

4

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

在一個非常簡單的例子中,這沒有區別。但是,考慮以下因素: -

  • 當一條記錄被更新時,這個記錄了更新會話獲取的鎖,
  • 當一個記錄被更新,觸發器在桌子上會開除

此更新的這些方面顯示該列實際上已更新。

當然,當值相同時,可能會進行一些優化,但這些作爲Oracle的用戶不可見。

+0

因此,如果更新確實發生,那麼這是否意味着如果正在跟蹤審計(我的理解是Oracle可以跟蹤列級別的更改),那麼即使值沒有更改,它也會被視爲更新並被跟蹤審計?此外,這意味着如果「更新」確實不「更新」,因爲值是相同的,那麼這應該在代碼中說明,對吧?就像檢查是否相等,如果值相等,不更新? – BigFish

+0

@BigFish我不確定Oracle審計是做什麼的。 –

2

是的,即使實際值沒有改變,所有行都會更新並觸發所有觸發器。

相關問題