免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

mysql中視圖原理的示例分析

小編給大家分享一下MySQL中視圖原理的示例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

創新互聯公司專注于湛河網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供湛河營銷型網站建設,湛河網站制作、湛河網頁設計、湛河網站官網定制、小程序定制開發服務,打造湛河網絡公司原創品牌,更為您提供湛河網站排名全網營銷落地服務。

一、什么是視圖

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

例子:定一班級表class(ID,name) 學生表 student(id,class_id,name);

當數據表結構很復雜,但我們只關心其中一部分數據的時候就可以使用視圖,定義關心的數據

創建視圖:

復制代碼 代碼如下:

create view v_stu as select  c.name as c_name ,s.name as stu_name from student  s,class  c where c.id = s.class_id

查詢視圖v_stu

select * from v_stu
c_namestu_name
wu一班
li二班

二、為什么使用視圖

1.安全性。一般是這樣做的:創建一個視圖,定義好該視圖所操作的數據。之后將用戶權限與視圖綁定。這樣的方式是使用到

了一個特性:grant語句可以針對視圖進行授予權限。

2.查詢性能提高

3.有靈活性的功能需求后,需要改動表的結構而導致工作量比較大。那么可以使用虛擬表的形式達到少修改的效果。

這是在實際開發中比較有用的

例子:假如因為某種需要,a表與b表需要進行合并起來組成一個新的表c。最后a表與b表都不會存在了。而由于原來程序中編寫sql分別是基于a表與b表查詢的,這就意味著需要重新編寫大量的sql(改成向c表去操作數據)。而通過視圖就可以做到不修改。定義兩個視圖名字還是原來的表名a和b。a、b視圖完成從c表中取出內容。

說明:使用這樣的解決方式,基于對視圖的細節了解越詳細越好。因為使用視圖還是與使用表的語法上沒區別。比如視圖名a,那么查詢還是"select * from a"。

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

視圖的工作機制:當調用視圖的時候,才會執行視圖中的sql,進行取數據操作。視圖的內容沒有存儲,而是在視圖被引用的時候才派生出數據。這樣不會占用空間,由于是即時引用,視圖的內容總是與真實表的內容是一致的。視圖這樣設計有什么好處?節省空間,內容是總是一致的話,那么我們不需要維護視圖的內容,維護好真實表的內容,就可以保證視圖的完整性了。

三、視圖的執行方式

視圖中是沒有保存真實的數據的,只是引用了真實表中的數據,其引用的數據有其定義決定,當我們進行查詢視圖其實是從定義中取數據;

MySQL 中會有infomation_schema 這么一個數據庫,它是mysql自帶的一個數據庫,存儲mysql數據庫的一些元數據,所謂的元數據是指的是mysql的表信息。視圖信息、列信息等。簡單的說就相當于mysql數據庫的一個目錄。所有的視圖在views 表中都有存儲說明;從這里我們可以看出mysql 的工作機制;

select * from v_stu;

v_stu也可以是一個表名,由于視圖和表的物理結構不同,表中可以查出真實的數據,而視圖需要查找到是定義,從而得到需要的數據,我們怎么知道v_stu是一個視圖呢?是因為有一個查看目錄的例程在做這件事。

視圖機制:

視圖處理有兩種機制,替換式和具化式;

① 替換式:操作視圖時,視圖名直接被視圖定義給替換掉,結果就變成select * from (select  c.name as c_name ,s.name as stu_name from student  s,class  c where c.id = s.class_id),在提交給mysql執行;

② 具化式:mysql先得到了視圖執行的結果,該結果形成一個中間結果暫時存在內存中。之后,外面的select語句就調用了這些中間結果(臨時表)。

看起來都是要得到結果,形式上有區別,好像沒體會到本質上的區別。兩種方式又有什么樣的不同呢?

替換方式,將視圖公式替換后,當成一個整體sql進行處理了。具體化方式,先處理視圖結果,后處理外面的查詢需求。

替換方式可以總結為,先準備,后執行。

具體化方式總結理解為,分開處理。

哪種方式好?不知道。mysql會自己確定使用哪種方式進行處理的。自己在定義視圖的時候也可以指定使用何種方式。

例子:

語法:

CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 視圖名 [(屬性清單)]
AS SELECT 語句
[WITH [CASCADED|LOCAL] CHECK OPTION];

ALGORITHM有三個參數分別是:merge、TEMPTABLE、UNDEFINED

merge:處理方式替換式,可以進行更新真實表中的數據;

TEMPTABLE:具化式,由于數據存儲在臨時表中,所以不可以進行更新操作!

當你的參數定義是UNDEFINED(沒有定義ALGORITHM參數)。mysql更傾向于選擇替換方式。是因為它更加有效。

例子:

create ALGORITHM=merge view v_stu as select c.name as c_name ,s.name as stu_name from student s,class c where c.id = s.class_id
update v_stu set c_name = '' where c_name ='';

執行成功

create ALGORITHM=TEMPTABLEview v_stu as select c.name as c_name ,s.name as stu_name from student s,class c where c.id = s.class_id

執行失敗,不可以更新!

看完了這篇文章,相信你對“mysql中視圖原理的示例分析”有了一定的了解,如果想了解更多相關知識,歡迎關注創新互聯行業資訊頻道,感謝各位的閱讀!

文章題目:mysql中視圖原理的示例分析
分享路徑:http://m.newbst.com/article18/jicpdp.html

成都網站建設公司_創新互聯,為您提供手機網站建設外貿網站建設網站排名外貿建站微信公眾號靜態網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站制作