亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

6 MySQL視圖

系統 2334 0

目錄:

  1. 視圖概述

    1.1 為什么引入視圖

    1.2 什么是視圖

    1.3 視圖的好處

    1.4 視圖的分類

  2. 視圖的建立和刪除

  3. 實驗

?

?

1.? 視圖概述

1.1? 為什么引入視圖 [1]

問題:假如因為某種需要, a 表與 b 表需要進行合并起來組成一個新的表 c 。最后 a 表與 b 表都不會存在了。而由于原來程序中編寫 sql 分別是基于 a 表與 b 表查詢的,這就意味著需要重新編寫大量的 sql( 改成向 c 表去操作數據 )

解決方案:定義兩個視圖名字還是原來的表名 a b a b 視圖完成從 c 表中取出內容。通過視圖就可以做到不修改。

1.2? 什么是視圖 [2]

視圖是從一個或多個表中導出來的表,是一種虛擬存在的表。視圖就像一個窗口,通過這個窗口可以看到系統專門提供的數據。這樣,用戶可以不用看到整個數據庫中的數據,而之關心對自己有用的數據。數據庫中只存放了視圖的定義,而沒有存放視圖中的數據,這些數據存放在原來的表中。使用視圖查詢數據時,數據庫系統會從原來的表中取出對應的數據。視圖中的數據依賴于原來表中的數據,一旦表中數據發生改變,顯示在視圖中的數據也會發生改變。

1.3? 視圖的好處 [3]

(1)? 安全性。

  一般是這樣做的 : 創建一個視圖,定義好該視圖所操作的數據。之后將用戶權限與視圖綁定。這樣的方式是使用到了一個特性: grant 語句可以針對視圖進行授予權限。
(2)? 查詢性能提高。
(3)? 應對復雜的查詢需求。

  可以進行問題分解,然后將創建多個視圖獲取數據。將視圖聯合起來就能得到需要的結果了。

(4)? 靈活應對需求變更。
  有靈活性的功能需求后,需要改動表的結構而導致工作量比較大。那么可以使用虛擬表的形式達到少修改的效果。這是在實際開發中比較有用的。比如下文的問題案例。

?

1.4? 視圖的分類 [4]

mysql 的視圖有三種類型: MERGE TEMPTABLE UNDEFINED 。如果沒有 ALGORITHM 子句,默認算法是 UNDEFINED (未定義的)。算法會影響 MySQL 處理視圖的方式。

(1)?MERGE ,會將引用視圖的語句的文本與視圖定義合并起來,使得視圖定義的某一部分取代語句的對應部分。

(2)?TEMPTABLE ,視圖的結果將被置于臨時表中,然后使用它執行語句。

(3)?UNDEFINED MySQL 將選擇所要使用的算法。如果可能,它傾向于 MERGE 而不是 TEMPTABLE ,這是因為 MERGE 通常更有效,而且如果使用了臨時表,視圖是不可更新的。

?

2.? 視圖的建立和刪除 [5]

mysql 通過 create?view 實現創建視圖,語法:

create?[algorithm={undifined|merge|temptable}]?view?view_name?[(properties)]?as?select?*?[with?[CASCADED|LOCAL]?check?option];

?

解析:

algorithm 是可選參數,表示視圖選擇的算法, undefined 表示 mysql 自動選擇算法, merge 表示將使用視圖的語句與視圖定義合并,使視圖的定義部分取代語句的對應部分, temptable 表示視圖的結構保存到臨時表,然后使用臨時表執行語句。

view_name 表示要創建的視圖的名字。

properties 是可選參數,指定視圖中各屬性的名詞,默認與 select 中查詢的相同。

select 是一個完整的查詢語句從某個表中查詢某些滿足條件的記錄并導入視圖中。

with?check?option 是可選參數,表示更新視圖是要保證在視圖的權限范圍之內。

?

視圖的更改刪除請參看實驗部分。

?

3.? 實驗

(1)? 創建表、插入數據

?

          
            create
          
          
            table
          
          
             book(

id 
          
          
            int
          
          (
          
            10
          
          ) 
          
            not
          
          
            null
          
          
             auto_increment,

name 
          
          
            varchar
          
          (
          
            40
          
          ) 
          
            not
          
          
            null
          
          
            ,

author 
          
          
            varchar
          
          (
          
            40
          
          ) 
          
            not
          
          
            null
          
          
            ,

press 
          
          
            varchar
          
          (
          
            40
          
          ) 
          
            not
          
          
            null
          
          
            ,

price 
          
          
            int
          
          (
          
            4
          
          
            ),


          
          
            primary
          
          
            key
          
          
             (id)

);




          
          
            insert
          
          
            into
          
           book(name,author,press,price) 
          
            values
          
           ("mysql_guider","xiao ming", "whu
          
            -
          
          press", "
          
            99
          
          
            ");


          
          
            insert
          
          
            into
          
           book(name,author,press,price) 
          
            values
          
           ("python_guider","xiao ming", "whu
          
            -
          
          press", "
          
            100
          
          
            ");


          
          
            insert
          
          
            into
          
           book(name,author,press,price) 
          
            values
          
           ("ws_guider","xiao ming", "whu
          
            -
          
          press", "
          
            101
          
          ");
        
View Code

?

(2)? 創建視圖

create?view?book_view?as?select?name,?author?from?book;

?創建成功!

(3)? 查看視圖

desc?book_view;

?

?

(4)? 使用視圖進行查詢

select?*?from?book_view;

?

?

(5)? 使用視圖進行插入數據

insert?into?book_view?values?("lol_guider","xiao?yang");

插入成功!

?

select?*?from?book_view;

? 6 MySQL視圖

select?*?from?book;

? 6 MySQL視圖

(6)? 使用視圖進行更改數據

update?book_view?set?author="xiao?ma"?where?name="ws_guider";

更改成功!

select?*?from?book;

? 6 MySQL視圖

(7)? 更改視圖

alter?view?book_view?as?select?name,?author,?price?from?book?with?cascaded?check?option;

更改成功!

desc?book_view;

?

(8)? 刪除視圖

drop?view?if?exists?book_view;

?

運行成功!

??

參考:

[1]? http://www.cnblogs.com/wangtao_20/archive/2011/02/24/1964276.html

[2]? http://www.jb51.net/article/36363.htm

[3]? http://www.cnblogs.com/lyhabc/p/3801527.html

[4]? http://blog.51yip.com/mysql/1062.html

[5]? http://www.cnblogs.com/kiwi/archive/2012/11/17/2775228.html

?

?

?

6 MySQL視圖


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产精品一区二区久久沈樵 | 四虎影视1304t| 成人免费一级片 | 涩久久| 99久久免费中文字幕精品 | 久久国产美女 | 最新中文字幕在线播放 | 国产 欧美 日产久久 | 久久精品亚洲 | 国产日韩欧美二区 | 欧美国产综合 | 免费一级毛片不卡在线播放 | 国产在线精彩视频二区 | 台湾一级毛片免费播放 | 97在线观看视频免费 | 国产偷国产偷亚洲高清在线 | 97婷婷色| 久久福利资源站免费观看i 久久高清 | 大片毛片女女女女女女女 | 伊人77| 国产在线综合网 | 91福利刘玥国产在线观看 | 在线免费一级片 | 日本不卡不码高清免费观看 | 日日夜夜伊人 | 狠狠躁夜夜躁人人爽天天不 | 99re免费视频精品全部 | 5060网永久免费一级毛片 | 看全色黄大色黄大片 视 | 草逼网站| 欧美激情久久久久久久大片 | 国产日日操 | 日韩午夜网站 | 亚洲精品www久久久久久 | 国产精品国产三级国产无毒 | 久久精品国产只有精品2020 | 午夜网站在线观看免费网址免费 | 午夜国产福利在线 | 国产精品66 | 久久99精品国产麻豆不卡 | 日本精品视频一区二区三区 |