資料庫檢視View的使用
阿新 • • 發佈:2018-11-11
一、檢視的概念:
概念:
檢視是指計算機資料庫中的檢視,是一個虛擬表,其內容由查詢定義。同真實的表一樣,檢視包含一系列帶有名稱的列和行資料。但是,檢視並不在資料庫中以儲存的資料值集形式存在。行和列資料來自由定義檢視的查詢所引用的表,並且在引用檢視時動態生成。
首先明白幾個概念:
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';