1. 程式人生 > >資料庫學習總結(九)——檢視

資料庫學習總結(九)——檢視

文章目錄

檢視的定義

檢視是一種虛擬存在的表,對於使用檢視的使用者來說基本上是透明的。檢視並不在資料庫中實際存在,行和列資料來自定義檢視的查詢總使用的表,並且是在使用檢視時動態生成的。

檢視相對於普通表的優勢:
簡單:使用檢視的使用者完全不需要關係後面對應的表結構、關聯條件和篩選條件,對使用者來說已經是過濾好的符合條件的結果集。
安全:使用檢視的使用者只能訪問他們被允許的結果集,對錶的許可權管理並不能限制到某個行某個列,但是通過檢視就可以簡單的實現。
資料獨立:一旦檢視的結構確定了,可以遮蔽表結構變化對使用者的影響,源表增加列對檢視沒有影響;源表修改列名,則可以通過修改檢視來解決,不會造成對訪問者的影響。

建立檢視

CREATE [OR REPLACE] VIEW 檢視名(列1,列2…)
AS SELECT (列1,列2…)
FROM …;
[WITH [CASCADED|LOCAL] CHECK OPTION]

AS: 表示檢視將要執行的操作
WITH CHECK OPTION:表示建立檢視時保證在該檢視的許可權範圍之內
CASCADED:表示在建立檢視時,需要滿足跟該檢視有關的所有相關檢視和表的條件,該引數為預設值
LOCAL:表示建立檢視時,只要滿足該檢視本身定義的條件即可

修改檢視

 CREATE OR REPLACE VIEW 檢視名 AS SELECT [...] FROM [...];
 [WITH [CASCADED|LOCAL] CHECK OPTION]

create or replace :如果修改的檢視存在,那麼將使用修改語句對檢視進行修改,如果檢視不存在,那麼將建立一個檢視

 ALTER view 檢視名  AS SELECT  [...] FROM [...];
 [WITH [CASCADED|LOCAL] CHECK OPTION]

檢視檢視

檢視檢視欄位資訊

desc 檢視名

檢視檢視的基本資訊

show tables status like ‘檢視名’;

其中comment(註釋)中沒有資訊,說明這個表不是檢視
comment 為view表示這個表是檢視

檢視檢視定義

show create view 檢視名稱\G

能夠檢視檢視的名稱、建立語句、字元編碼等資訊

更新檢視

1.insert into 檢視名 values( , , );

2.update 檢視名 SET  [...] 

3.delete from 檢視名 where 條件;

[WITH [CASCADED|LOCAL] CHECK OPTION] 決定了是否允許更新資料記錄不再滿足檢視的條件。

為了防止通過檢視修改導致資料無故丟失,建議加上WITH CHECK OPTION

檢視的可更新性和檢視中查詢的定義有關係,以下型別的檢視是不可更新的。
1.包含如下關鍵字的sql語句:聚合函式(sum,min,max,count等),distinct,group by,having,union或者union all.
2.常量檢視。
3.select中包含子查詢。
4. outer jion
5.from一個不能更新的檢視
6.where句子的子查詢引用了from句子中的表

刪除檢視

drop view 檢視名稱;

備註:
1.可以通過檢視插入資料,但是隻能基於一個基礎表進行插入,不能跨表更新資料
2.檢視不是表,不儲存資料,只是一張虛擬的表,源表的資料發生變化後,檢視的結果也同步發生變化
3. 一般情況下,在建立有條件限制的檢視時,加上“WITH CHECK OPTION”命令。