Oracle的update語句優化研究
一、 update語句的語法與原理
1. 語法
單表:UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值 如:update t_join_situation set join_state='1' where year='2011'
更新年度為“2011”的數據的join_state字段為“1”。如果更新的字段加了索引,更新時會重建索引,更新效率會慢。
多表關聯,並把一個表的字段值更新到另一個表中的字段去:
update 表a set a.字段1 = (select b.字段1 from 表b where a.字段2=b.字段2) where exists(select 1 from 表b where a.字段2=b.字段2)
oracle的更新語句不通MSSQL那么簡單易寫,就算寫出來了,但執行時可能會報
這是由於set哪里的子查詢查出了多行數據值,oracle規定一對一更新數據,所以提示出錯。要解決這樣必須保證查出來的值一一對應。
2. 原理
Update語句的原理是先根據where條件查到數據后,如果set中有子查詢,則執行子查詢把值查出來賦給更新的字段,執行更新。
如:update 表a set a.字段1 = (select b.字段1 from 表b where a.字段2=b.字段2) where exists(select 1 from 表b where a.字段2=b.字段2)。查表a的所有數據,循環每條數據,驗證該條數據是否符合exists(select 1 from 表b where a.字段2=b.字段2)條件,如果是則執行(select b.字段1 from 表b where a.字段2=b.字段2)查詢,查到對應的值更新a.字段1中。關聯表更新時一定要有exists(select 1 from 表b where a.字段2=b.字段2)這樣的條件,否則將表a的其他數據的字段1更新為null值。