在操作資料的同時查看操作前或操作後的值

來源:互聯網
上載者:User

----start

我們經常需要對資料庫進行插入、更新、刪除等操作,如果我們想在更新資料的同時查看一下更新後的值,該怎麼辦呢?怎麼樣?是不是不太明白我說的話,不要緊,考慮下面的情況:

CREATE TABLE USER<br />(<br />NAME VARCHAR(20) NOT NULL,--姓名<br />SALARY FLOAT NOT NULL--工資<br />);<br />INSERT INTO USER (NAME,SALARY) VALUES<br />('張三', 1000),<br />('李四', 2000),<br />('王五', 2400),<br />('趙六', 2800),<br />('高七', 3000);  

假設現在要給工資<=2000的員工漲工資,在原來的基礎上提供20%,我們可以這麼寫:

 UPDATE USER SET SALARY=SALARY*(1+0.2) WHERE SALARY<=2000 

當你更新完上面的語句後,發現自己很衝動,沒有查看有哪些員工就給更新了,然後你可能覺得不要緊,用如下語句查看一下:

SELECT * FROM USER WHERE SALARY<=2400  

遺憾的是上面語句查詢出來的結果已經不全是你更新的資料了,王五也被查詢出來了,而王五並沒有漲工資。那麼,有沒有一種方法,在更新的同時查看一下哪些值被更新了,更新前或更新後的值是多少呢?答案是有,如下:

 SELECT * FROM FINAL TABLE<br />(<br /> UPDATE USER SET SALARY=SALARY*(1+0.2) WHERE SALARY<=2000<br />) 

如果更新操作影響的行有很多,而我們只想看一下有沒有姓李的人,只取10條查看一下,該怎麼辦呢?如下:

SELECT * FROM FINAL TABLE<br />(<br /> UPDATE USER SET SALARY=SALARY*(1+0.2) WHERE SALARY<=2000<br />)<br /> WHERE NAME LIKE '李%'<br />FETCH FIRST 10 ROWS ONLY;  

看到這,如果你執行了上面的語句,那麼你可能發現,以上語句的查詢結果是更新後的值,那麼,我們想查看更新前的值,該怎麼辦呢?很簡單,我們只要把
FINAL TABLE 換成 OLD ABLE
就可以了,如下:

 SELECT * FROM OLD TABLE<br />(<br /> UPDATE USER SET SALARY=SALARY*(1+0.2) WHERE SALARY<=2000<br />)<br /> WHERE NAME LIKE '李%'<br />FETCH FIRST 10 ROWS ONLY; 

那麼,我既想看一下更新前的值,又想看一下更新後的值,該怎麼呢?是不是把關鍵字FINAL和OLD一起使用就可以了呢?答案沒有直接的方法同時查看更新前和更新後的值,但是我們可以通過INCLUDE關鍵字,創造虛擬欄位來包含更新前的值,如下:

SELECT * FROM FINAL TABLE<br />(<br /> UPDATE USER<br /> INCLUDE (OLD_SALARY FLOAT)<br /> SET SALARY=SALARY*(1+0.2),OLD_SALARY=SALARY<br /> WHERE SALARY<=2000<br />) 

除了FINAL和OLD關鍵字外,其實還有個關鍵字:NEW,它的作用是,查看SQL更新後,trigger(觸發器)執行前的值。

 

另外把上面的UPDATE語句換成INSERT和DELETE語句同樣適用

 

上面的這個例子不是很實用,其實這個功能最典型的用途是,當我們向自動產生主鍵的表插入資料後,我們很可能需要查看產生的主索引值,這個時候,這個功能將相當有用。

---更多參見:DB2 SQL 精萃

----聲明:轉載請註明出處。

----last updated on 2010.1.9

----written by ShangBo on 2009.11.5

----end

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.