數據庫視圖中嵌套視圖的注意事項----知識點 ----有點狂

在創建視圖的過程中,有時可能需要調用另一個視圖,例如新建的視圖爲v2,調用一個存在的視圖v1。如果v1中有很多列的存在,有的開發人員可能爲了省事,就直接使用了v1.*。
比如說創建視圖v2如下:

---假設v1要去關聯的表爲tableName
create view v2 as
select v1.*,column1,column2,column3
  from v1 left outer join tableName on v1.id=tableName.id

這會有一個隱藏的問題就是,如果視圖v1中新增一列的情況下,這時視圖v2裏面就會發生列錯位的情況,相當於column1 這個列其實讀取的是新增列的那列數據,colunm2讀取的是column1的列數據等等以此類推。

有讀者可能問了,那把v1.*放到後面不就行了,如下的創建視圖的sql

---假設v1要去關聯的表爲tableName
create view v2 as
select column1,column2,column3,v1.*
  from v1 left outer join tableName on v1.id=tableName.id

這樣v1中新增列就不會發生讀取數據的錯誤了,我想說這也是一種解決方案,v1中新增列也不會發生數據讀取錯誤的情況。可是問題出現在v1中如果刪除了一列,那麼此視圖就會發生錯誤,提示列不等的情況。

因此還是建議把v1中想查詢的列給指明出來。如下:

---假設v1要去關聯的表爲tableName
create view v2 as
select column1,column2,column3,v1.column1,v2.column2,v3.column3
  from v1 left outer join tableName on v1.id=tableName.id
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章