亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mysql視圖原理與用法實(shí)例小結(jié)

 更新時(shí)間:2018年04月13日 10:50:09   作者:thelyon  
這篇文章主要介紹了mysql視圖原理與用法,結(jié)合實(shí)例形式分析了mysql視圖的概念、原理、創(chuàng)建、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例總結(jié)了mysql視圖原理與用法。分享給大家供大家參考,具體如下:

一、什么是視圖

視圖是指計(jì)算機(jī)數(shù)據(jù)庫(kù)中的視圖,是一個(gè)虛擬表,其內(nèi)容由查詢(xún)定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱(chēng)的列和行數(shù)據(jù)。但是,視圖并不在數(shù)據(jù)庫(kù)中以存儲(chǔ)的數(shù)據(jù)值集形式存在。行和列數(shù)據(jù)來(lái)自由定義視圖的查詢(xún)所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。簡(jiǎn)單的來(lái)說(shuō)視圖是由其定義結(jié)果組成的表;

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

當(dāng)數(shù)據(jù)表結(jié)構(gòu)很復(fù)雜,但我們只關(guān)心其中一部分?jǐn)?shù)據(jù)的時(shí)候就可以使用視圖,定義關(guān)心的數(shù)據(jù)

創(chuàng)建視圖:

復(fù)制代碼 代碼如下:
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

查詢(xún)視圖 v_stu

select * from v_stu

c_name stu_name
wu 一班
li 二班

二、為什么使用視圖

1.安全性。一般是這樣做的:創(chuàng)建一個(gè)視圖,定義好該視圖所操作的數(shù)據(jù)。之后將用戶(hù)權(quán)限與視圖綁定。這樣的方式是使用到

了一個(gè)特性:grant語(yǔ)句可以針對(duì)視圖進(jìn)行授予權(quán)限。

2.查詢(xún)性能提高。

3.有靈活性的功能需求后,需要改動(dòng)表的結(jié)構(gòu)而導(dǎo)致工作量比較大。那么可以使用虛擬表的形式達(dá)到少修改的效果。

這是在實(shí)際開(kāi)發(fā)中比較有用的

例子:假如因?yàn)槟撤N需要,a表與b表需要進(jìn)行合并起來(lái)組成一個(gè)新的表c。最后a表與b表都不會(huì)存在了。而由于原來(lái)程序中編寫(xiě)sql分別是基于a表與b表查詢(xún)的,這就意味著需要重新編寫(xiě)大量的sql(改成向c表去操作數(shù)據(jù))。而通過(guò)視圖就可以做到不修改。定義兩個(gè)視圖名字還是原來(lái)的表名a和b。a、b視圖完成從c表中取出內(nèi)容。

說(shuō)明:使用這樣的解決方式,基于對(duì)視圖的細(xì)節(jié)了解越詳細(xì)越好。因?yàn)槭褂靡晥D還是與使用表的語(yǔ)法上沒(méi)區(qū)別。比如視圖名a,那么查詢(xún)還是"select * from a"。

4.復(fù)雜的查詢(xún)需求??梢赃M(jìn)行問(wèn)題分解,然后將創(chuàng)建多個(gè)視圖獲取數(shù)據(jù)。將視圖聯(lián)合起來(lái)就能得到需要的結(jié)果了。

視圖的工作機(jī)制:當(dāng)調(diào)用視圖的時(shí)候,才會(huì)執(zhí)行視圖中的sql,進(jìn)行取數(shù)據(jù)操作。視圖的內(nèi)容沒(méi)有存儲(chǔ),而是在視圖被引用的時(shí)候才派生出數(shù)據(jù)。這樣不會(huì)占用空間,由于是即時(shí)引用,視圖的內(nèi)容總是與真實(shí)表的內(nèi)容是一致的。視圖這樣設(shè)計(jì)有什么好處?節(jié)省空間,內(nèi)容是總是一致的話(huà),那么我們不需要維護(hù)視圖的內(nèi)容,維護(hù)好真實(shí)表的內(nèi)容,就可以保證視圖的完整性了。

三、視圖的執(zhí)行方式

視圖中是沒(méi)有保存真實(shí)的數(shù)據(jù)的,只是引用了真實(shí)表中的數(shù)據(jù),其引用的數(shù)據(jù)有其定義決定,當(dāng)我們進(jìn)行查詢(xún)視圖其實(shí)是從定義中取數(shù)據(jù);

MySQL 中會(huì)有infomation_schema 這么一個(gè)數(shù)據(jù)庫(kù),它是mysql自帶的一個(gè)數(shù)據(jù)庫(kù),存儲(chǔ)mysql數(shù)據(jù)庫(kù)的一些元數(shù)據(jù),所謂的元數(shù)據(jù)是指的是mysql的表信息。視圖信息、列信息等。簡(jiǎn)單的說(shuō)就相當(dāng)于mysql數(shù)據(jù)庫(kù)的一個(gè)目錄。所有的視圖在views 表中都有存儲(chǔ)說(shuō)明;從這里我們可以看出mysql 的工作機(jī)制;

select * from v_stu;

v_stu也可以是一個(gè)表名,由于視圖和表的物理結(jié)構(gòu)不同,表中可以查出真實(shí)的數(shù)據(jù),而視圖需要查找到是定義,從而得到需要的數(shù)據(jù),我們?cè)趺粗纕_stu是一個(gè)視圖呢?是因?yàn)橛幸粋€(gè)查看目錄的例程在做這件事。

視圖機(jī)制:

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

① 替換式:操作視圖時(shí),視圖名直接被視圖定義給替換掉,結(jié)果就變成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執(zhí)行;

② 具化式:mysql先得到了視圖執(zhí)行的結(jié)果,該結(jié)果形成一個(gè)中間結(jié)果暫時(shí)存在內(nèi)存中。之后,外面的select語(yǔ)句就調(diào)用了這些中間結(jié)果(臨時(shí)表)。

看起來(lái)都是要得到結(jié)果,形式上有區(qū)別,好像沒(méi)體會(huì)到本質(zhì)上的區(qū)別。兩種方式又有什么樣的不同呢?

替換方式,將視圖公式替換后,當(dāng)成一個(gè)整體sql進(jìn)行處理了。具體化方式,先處理視圖結(jié)果,后處理外面的查詢(xún)需求。

替換方式可以總結(jié)為,先準(zhǔn)備,后執(zhí)行。

具體化方式總結(jié)理解為,分開(kāi)處理。

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

例子:

語(yǔ)法:

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

ALGORITHM有三個(gè)參數(shù)分別是:merge、TEMPTABLE、UNDEFINED

merge:處理方式替換式,可以進(jìn)行更新真實(shí)表中的數(shù)據(jù);

TEMPTABLE:具化式,由于數(shù)據(jù)存儲(chǔ)在臨時(shí)表中,所以不可以進(jìn)行更新操作!

當(dāng)你的參數(shù)定義是UNDEFINED(沒(méi)有定義ALGORITHM參數(shù))。mysql更傾向于選擇替換方式。是因?yàn)樗佑行А?/p>

例子:

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 ='';

執(zhí)行成功

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

執(zhí)行失敗,不可以更新!

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《MySQL查詢(xún)技巧大全》、《MySQL事務(wù)操作技巧匯總》、《MySQL存儲(chǔ)過(guò)程技巧大全》、《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》及《MySQL常用函數(shù)大匯總

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。

相關(guān)文章

  • mysql5.7.25使用全文檢索功能的實(shí)例教程

    mysql5.7.25使用全文檢索功能的實(shí)例教程

    其實(shí)全文檢索在MySQL里面很早就支持了,下面這篇文章主要給大家介紹了關(guān)于mysql5.7.25使用全文檢索功能的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-02-02
  • mysql alter添加列的實(shí)現(xiàn)方式

    mysql alter添加列的實(shí)現(xiàn)方式

    這篇文章主要介紹了mysql alter添加列的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • MySQL系列數(shù)據(jù)庫(kù)設(shè)計(jì)三范式教程示例

    MySQL系列數(shù)據(jù)庫(kù)設(shè)計(jì)三范式教程示例

    這篇文章主要為大家介紹了MySQL系列之?dāng)?shù)據(jù)庫(kù)設(shè)計(jì)三范式的教程示例講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-10-10
  • MAC下Mysql5.7.10版本修改root密碼的方法

    MAC下Mysql5.7.10版本修改root密碼的方法

    這篇文章主要介紹了MAC下Mysql5.7.10版本修改root密碼的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-03-03
  • mysql運(yùn)行net start mysql報(bào)服務(wù)名無(wú)效的解決辦法

    mysql運(yùn)行net start mysql報(bào)服務(wù)名無(wú)效的解決辦法

    這篇文章主要為大家詳細(xì)介紹了mysql運(yùn)行net start mysql報(bào)服務(wù)名無(wú)效的解決辦法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 詳解MySQL like如何查詢(xún)包含''%''的字段(ESCAPE用法)

    詳解MySQL like如何查詢(xún)包含''%''的字段(ESCAPE用法)

    這篇文章主要介紹了詳解MySQL like如何查詢(xún)包含'%'的字段(ESCAPE用法),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 一文解答為什么MySQL的count()方法這么慢

    一文解答為什么MySQL的count()方法這么慢

    這篇文章主要介紹了一文解答為什么MySQL的count()方法這么慢,mysql用count方法查全表數(shù)據(jù),在不同的存儲(chǔ)引擎里實(shí)現(xiàn)不同,myisam有專(zhuān)門(mén)字段記錄全表的行數(shù),直接讀這個(gè)字段就好了
    2022-07-07
  • 使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能

    使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能

    這篇文章主要介紹了使用Grafana+Prometheus監(jiān)控mysql服務(wù)性能的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的工作或?qū)W習(xí)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下方法
    2020-03-03
  • 解析MySQL設(shè)置當(dāng)前時(shí)間為默認(rèn)值的方法

    解析MySQL設(shè)置當(dāng)前時(shí)間為默認(rèn)值的方法

    本篇文章是對(duì)MySQL設(shè)置當(dāng)前時(shí)間為默認(rèn)值的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL配置文件my.cnf中文詳解附mysql性能優(yōu)化方法分享

    MySQL配置文件my.cnf中文詳解附mysql性能優(yōu)化方法分享

    Mysql參數(shù)優(yōu)化對(duì)于新手來(lái)講,是比較難懂的東西,其實(shí)這個(gè)參數(shù)優(yōu)化,是個(gè)很復(fù)雜的東西,對(duì)于不同的網(wǎng)站,及其在線(xiàn)量,訪問(wèn)量,帖子數(shù)量,網(wǎng)絡(luò)情況,以及機(jī)器硬件配置都有關(guān)系,優(yōu)化不可能一次性完成,需要不斷的觀察以及調(diào)試,才有可能得到最佳效果。
    2011-09-09

最新評(píng)論