數據庫視圖View的使用


一、視圖的概念:

概念:

視圖是指計算機數據庫中的視圖,是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖並不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,並且在引用視圖時動態生成。

首先明白幾個概念:

1.視圖是一個虛擬表,其內容由查詢定義。 2.視圖中的數據是由一張或多張表中的數據組成的。 3.如果你改動了基本表,如果你的視圖來源於這個基本表,那視圖給你呈現的結果也會隨之發生變化。

作用: 

* 簡單性。看到的就是需要的。視圖不僅可以簡化用戶對數據的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,從而使得用戶不必為以后的操作每次指定全部的條件。
* 安全性。通過視圖用戶只能查詢和修改他們所能見到的數據。但不能授權到數據庫特定行和特定的列上。通過視圖,用戶可以被限制在數據的不同子集上:
使用權限可被限制在另一視圖的一個子集上,或是一些視圖和基表合並后的子集上。
* 邏輯數據獨立性。視圖可幫助用戶屏蔽真實表結構變化帶來的影響。 

二、視圖語法:

視圖創建:

CREATE [OR REPLACE] [{FORCE|NOFORCE}] VIEW view_name
AS
SELECT查詢
[WITH READ ONLY CONSTRAINT]

語法解析:
1. OR REPLACE:如果視圖已經存在,則替換舊視圖。
2. FORCE:即使基表不存在,也可以創建該視圖,但是該視圖不能正常使用,當基表創建成功后,視圖才能正常使用。
3. NOFORCE:如果基表不存在,無法創建視圖,該項是默認選項。
4. WITH READ ONLY:默認可以通過視圖對基表執行增刪改操作,但是有很多在基表上的限制(比如:基表中某列不能為空,但是該列沒有出現在視圖中,則不能通過視圖執行insert操作),WITH READ ONLY說明視圖是只讀視圖,不能通過該視圖進行增刪改操作。現實開發中,基本上不通過視圖對表中的數據進行增刪改操作。

示例:

CREATE OR REPLACE VIEW afa_attach_fileinfo_view (ID,NAME,  FILESIZE,  CONTENTTYPE,  FILEPATH,  BIZID,  BIZTYPE,  CREATETIME,  CREATEBY,  VERSION,  FAGENIDCODE)
AS
select * from (select f.*,ab.fagenidcode
        from fab_bill_template t
        left join fab_agen_bill ab on ab.fbillid = t.fbillid
        left join fab_agen a on a.fagenidcode = ab.fagenidcode and a.fisfinal = 1
        left join fab_billbatch bb on t.fbillbatchid = bb.fid
        left join  afa_attach_fileinfo f on f.bizid = t.fid
UNION ALL
select f.*,fa.fagenidcode
         from FAB_AGEN_SEAL fa 
         left join afa_attach_fileinfo f on fa.fid=f.bizid);

查詢可用:

select * from afa_attach_filestore_view
where fagenIdCode IN  (
           select fagenidcode from fab_agen where flevelcode like (
                  select flevelcode from fab_agen where fagenidcode ='20340af2dc7741adbd58df214819d4e7'
           )||'%')

如果是mysql數據,注意:

以上sql可修改為:

select *
  from afa_attach_filestore_view
 where fagenIdCode IN
       (select fagenidcode
          from fab_agen
         where flevelcode like concat(
               (select flevelcode
                  from fab_agen
                 where fagenidcode = 'BE8EF91813BAA4D36FE1DFEF87C6EF07'),'%'));

視圖操作: 

備注:以下操作,如果當前視圖是單表的情況下,且不是只讀的情況,這個時候基本表的數據也會修改、新增、刪除。新增的時候要覆蓋所有字段。 

修改: 

UPDATE afa_user_view SET user_name='視圖' WHERE user_code='system'

添加: 

INSERT INTO afa_user_view VALUES('test','001'

刪除: 

delete from afa_attach_filestore_view where id='cf446676ca0c4c49bd1a3f33a6b5f553';

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM