<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 297,  comments - 1618,  trackbacks - 0
     

    本文講述MySql5.x中視圖的使用,包括創建視圖、修改視圖和刪除視圖的相關知識,包括命令的語法、使用舉例以及注意事項。

    一.             視圖概述

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

    對其中所引用的基礎表來說,視圖的作用類似于篩選。定義視圖的篩選可以來自當前或其它數據庫的一個或多個表,或者其它視圖。通過視圖進行查詢沒有任何限制,通過它們進行數據修改時的限制也很少。

    二.             創建視圖——CREATE VIEW

    1.       語法

    CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        VIEW [db_name.]view_name [(column_list)]
        AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]

    通過該語句可以創建視圖,若給定了[OR REPLACE],則表示當已具有同名的視圖時,將覆蓋原視圖。select_statement是一個查詢語句,這個查詢語句可從表或其它的視圖中查詢。視圖屬于數據庫,因此需要指定數據庫的名稱,若未指定時,表示在當前的數據庫創建新視圖。

    表和數據庫共享數據庫中相同的名稱空間,因此,數據庫不能包含相同名稱的表和視圖,并且,視圖的列名也不能重復。

    2.       使用舉例

    Eg. 本例創建一個產品表(product)和一個購買記錄表(purchase),再通過視圖purchase_detail查詢出購買的詳細信息。

    CREATE TABLE product

    (

            product_id INT NOT NULL,

        name VARCHAR(50) NOT NULL,

        price DOUBLE NOT NULL

    );

    INSERT INTO product VALUES(1, 'apple ', 5.5);

    CREATE TABLE purchase

    (

            id INT NOT NULL,

        product_id INT NOT NULL,

        qty INT NOT NULL DEFAULT 0,

        gen_time DATETIME NOT NULL

    );

    INSERT INTO purchase VALUES(1, 1, 10, NOW());

    CREATE VIEW purchase_detail AS SELECT product.name as name, product .price as price, purchase.qty as qty, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

    創建成功后,輸入:SELECT * FROM purchase_detail;

    運行效果如下:

    +-------+-------+-----+-------------+

    | name | price | qty | total_value |

    +-------+-------+-----+-------------+

    | apple |   5.5 | 10 |          55 |

    +-------+-------+-----+-------------+

    1 row in set (0.01 sec)

    3.       注意事項

    創建視圖存在如下注意事項:

    (1)       運行創建視圖的語句需要用戶具有創建視圖(CRATE VIEW)的權限,若加了[OR REPLACE]時,還需要用戶具有刪除視圖(DROP VIEW)的權限;

    (2)       SELECT語句不能包含FROM子句中的子查詢;

    (3)       SELECT語句不能引用系統或用戶變量;

    (4)       SELECT語句不能引用預處理語句參數;

    (5)       在存儲子程序內,定義不能引用子程序參數或局部變量;

    (6)       在定義中引用的表或視圖必須存在。但是,創建了視圖后,能夠舍棄定義引用的表或視圖。要想檢查視圖定義是否存在這類問題,可使用CHECK TABLE語句;

    (7)       在定義中不能引用TEMPORARY表,不能創建TEMPORARY視圖;

    (8)       在視圖定義中命名的表必須已存在;

    (9)       不能將觸發程序與視圖關聯在一起;

    (10)   在視圖定義中允許使用ORDER BY,但是,如果從特定視圖進行了選擇,而該視圖使用了具有自己ORDER BY的語句,它將被忽略。

    三.             修改視圖——ALTER VIEW

    1.       語法

    ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
        VIEW view_name [(column_list)]
        AS select_statement
        [WITH [CASCADED | LOCAL] CHECK OPTION]

    該語句用于更改已有視圖的定義。其語法與CREATE VIEW類似。

    2.       使用舉例

    Eg. 將上一小節中中創建的視purchase_detail進行修改,去掉qty列,語句如下:

    ALTER VIEW purchase_detail AS SELECT product.name as name, product .price as price, product .price * purchase.qty as total_value from product, purchase where product.product_id = purchase.product_id;

    此時通過語句:select * from purchase_detail;對視圖進行查詢時,結果如下:

    +-------+-------+-------------+

    | name | price | total_value |

    +-------+-------+-------------+

    | apple |   5.5 |          55 |

    +-------+-------+-------------+

    3.       注意事項

    修改視圖的注意事項除了第一條外跟創建視圖的注意事項是一樣的。第(1)條應改為:

    該語句需要具有針對視圖的CREATE VIEWDROP權限,也需要針對SELECT語句中引用的每一列的某些權限。

    四.             刪除視圖——DROP VIEW

    1.       語法

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

    該語句用戶刪除視圖,可一次刪除多個視圖。[IF EXISTS]選項確保語句正確運行。若沒有該子句,當指定的視圖不存在時,將發生錯誤。

    2.       使用舉例

    Eg1. 刪除在前面的小節中創建的視圖purchase_detailDROP VIEW purchase_detail;

    Eg2. 刪除一個未知的視圖:DROP VIEW IF EXISTS test_view;

    Eg3. 刪除多個視圖:DROP VIEW IF EXISTS test_view1, test_view2;

    3.       注意事項

    必須對要刪除的一個或多個視圖擁有DROP VIEW的權限。

    posted on 2007-12-26 16:39 阿蜜果 閱讀(4008) 評論(2)  編輯  收藏 所屬分類: MySql


    FeedBack:
    # re: 【MySql學習系列】視圖
    2007-12-27 20:18 | BeanSoft
    非常不錯!支持!  回復  更多評論
      
    # re: 【MySql學習系列】視圖
    2011-08-05 10:38 | 趙峰
    @BeanSoft
    非常感謝博主提供這篇文章,在下受教了!  回復  更多評論
      
    <2007年12月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

          生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
          我的作品:
          玩轉Axure RP  (2015年12月出版)
          

          Power Designer系統分析與建模實戰  (2015年7月出版)
          
         Struts2+Hibernate3+Spring2   (2010年5月出版)
         

    留言簿(263)

    隨筆分類

    隨筆檔案

    文章分類

    相冊

    關注blog

    積分與排名

    • 積分 - 2294312
    • 排名 - 3

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 美女18毛片免费视频| 国产福利视精品永久免费| 亚洲va在线va天堂va888www| 久久国产精品成人片免费| 亚洲啪AV永久无码精品放毛片| 亚洲第一视频在线观看免费| 免费A级毛片av无码| 国产精品亚洲专一区二区三区| 国产亚洲3p无码一区二区| 性xxxx视频播放免费| 九九精品成人免费国产片| 亚洲AV电影天堂男人的天堂| 久久久久亚洲精品美女| 免费一级毛片免费播放| 性xxxxx免费视频播放 | 黄网站色视频免费在线观看的a站最新| 亚洲午夜在线一区| 国产A在亚洲线播放| 免费看国产曰批40分钟| 黄色永久免费网站| 成全视频免费观看在线看| 精品一区二区三区免费毛片| 精品亚洲AV无码一区二区| 久久久久久久尹人综合网亚洲| 国产午夜免费福利红片| 免费不卡视频一卡二卡| 国产一精品一av一免费爽爽| 免费国产在线精品一区| 在线观看亚洲AV日韩AV| 亚洲精品中文字幕乱码影院| 亚洲一区爱区精品无码| 亚洲精品国产va在线观看蜜芽| 日韩精品免费电影| 免费大片黄在线观看yw| 18女人水真多免费高清毛片| 色www永久免费网站| 午夜不卡AV免费| 极品美女一级毛片免费| 亚洲日韩国产二区无码| 亚洲国产模特在线播放| 亚洲精品国产第1页|