視圖、存儲過程和函數(一)


視圖

1、什么是視圖:

  視圖是一種虛擬存在的表,對於使用視圖的用戶來說基本上是透明的。視圖並不在數據庫中實際存在,行和列數據來自定義視圖的查詢中使用的表,並且是在使用視圖時動態生產的。

2、視圖相對於普通的表的優勢主要包括以下幾項:

  a、簡單:使用視圖的用戶完全不需要關系后面對於的表的結構、關聯條件和篩選條件,對用戶來說已經是過濾好的復合條件的結果集;

  b、安全:使用視圖的用戶只能訪問他們被允許查詢的結果集,對表的權限管理並不能限制到某個行某個列,但是通過視圖就可以簡單地實現;

  c、數據獨立:一旦視圖的結構確定了,可以屏蔽表結構變化對用戶對影響,源表增加列對視圖沒有影響;源表修改列名,則可以通過修改視圖來解決,不會造成對訪問者對影響。

3、操作:創建或修改視圖、刪除視圖,以及查看視圖定義。

  3.1、創建視圖語法:

    CREATE [OR REPLACE] [ ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE }] 

      VIEW view_name [(column_list)] AS select_statement [WITH [ CASCADED | LOCAL] CHECK OPTION]

    eg:創建視圖area_list_view,可以使用以下命令:

      CREATE OR REPLACE VIEW `area_list_view` AS

       SELECT d.id as did,d.`address`,d.area_id,a.id as aid,a.`name` FROM address d,area a WHERE d.area_id = a.id;

 

 

 

  3.2、修改視圖語法:

    ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE }]

      VIEW view_name [( column_list )] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

    eg:修改視圖area_list_view,可以使用以下命令:

        ALTER VIEW `area_list_view` AS 

        SELECT d.id ,d.`address`,d.area_id,a.`name` FROM address d,area a WHERE d.area_id = a.id;

 

 

   WITH [CASCADED | LOCAL ] CHECK OPTION 決定了是否允許更新數據使記錄不再滿足視圖的條件(一般在多視圖的情況下才用到這個命令)。這個選項與Oracle數據庫中的選項是類似的,其中:

      LOCAL 只要滿足本視圖的條件就可以更新;

      CASCADED 則必須滿足所有真的該視圖的所有視圖的條件才可以更新。

  如果沒有明確是 LOCAL 還是 CASCADED ,則默認是 CASCADED 。

 

   3.3、刪除視圖語法:

    DROP VIEW [ IF EXISTS ] view_name [, view_name ] ...[RESTRICT | CASCADE ]

    eg:刪除area_list_view視圖: drop view area_list_view;

 

   3.4、查看視圖:

    1、查看視圖信息的操作:

      SHOW TABLE STATUS [ FROM db_name ] [LIKE 'pattern']

      eg:查看area_list_view視圖信息的操作:show table status like 'area_list_view'

  

 

 

    2、查看視圖定義:

      SHOW CREATE VIEW

      eg:查看視圖area_list_view的定義:show create view area_list_view  

 

  

 


免責聲明!

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



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