MySQL视图附带例子详解(小白都能懂哦)
1.視圖的概念
2.視圖的應(yīng)用場(chǎng)景
3.視圖的特點(diǎn)
4.創(chuàng)建視圖的格式
5.視圖的修改
6.視圖的刪除
7.視圖的查看
8.視圖的更新
9.視圖和表格的對(duì)比
10.視圖的優(yōu)缺點(diǎn)
1.視圖的概念
視圖是一種虛擬的表,和普通表用法一樣,不是在內(nèi)存中單獨(dú)開(kāi)辟一片空間(我們正常的表都是以儲(chǔ)存的數(shù)據(jù)值形式存在,就是會(huì)單獨(dú)在內(nèi)存里邊開(kāi)辟一塊空間),并且是在使用視圖的時(shí)候動(dòng)態(tài)生成的,只保存了sql邏輯,不保存查詢結(jié)果
2.視圖的應(yīng)用場(chǎng)景
重用SQL語(yǔ)句;
1.簡(jiǎn)化復(fù)雜的SQL操作。在編寫(xiě)查詢后,可以方便的重用它而不必知道它的基本查詢細(xì)節(jié);
2.使用表的組成部分而不是整個(gè)表;
3.保護(hù)數(shù)據(jù)??梢越o用戶授予表的特定部分的訪問(wèn)權(quán)限而不是整個(gè)表的訪問(wèn)權(quán)限;
4.更改數(shù)據(jù)格式和表示。視圖可返回與底層表的表示和格式不同的數(shù)據(jù)。
3.視圖的特點(diǎn)
1.視圖的列可以來(lái)自不同的表,是表的抽象和在邏輯意義上建立的新關(guān)系。
2.視圖是由基本表(實(shí)表)產(chǎn)生的表(虛表)。
3.視圖的建立和刪除不影響基本表。
4.對(duì)視圖內(nèi)容的更新(添加,刪除和修改)直接影響基本表。
5.當(dāng)視圖來(lái)自多個(gè)基本表時(shí),不允許添加和刪除數(shù)據(jù)。
4.創(chuàng)建視圖的格式
create view + 視圖名(自定義) + as select查詢語(yǔ)句
舉個(gè)例子,假如有一個(gè)學(xué)生信息表student,還有一個(gè)學(xué)生文理科狀況表aas如圖
student:
aas:
我們現(xiàn)在想要查看女生的姓名性別文理科狀況,然后再查看選理科的同學(xué)的姓名性別文理科狀況
按照正常寫(xiě)法:
1.查看女生的姓名性別文理科狀況:
SELECT sname,ssex,subject from student a join aas b on a.as_id=b.id where ssex=“女”
2.查看選理科的同學(xué)的姓名性別文理科狀況
SELECT sname,ssex,subject from student a join aas b on a.as_id=b.id where b.subject=“理科”
但是我們?nèi)绻靡晥D的話:
我們先把學(xué)生的姓名姓名文理科狀況組合成一張視圖:
create view abc as select sname,ssex,subject from student a join aas b on a.as_id=b.id
1.查看女生的姓名性別文理科狀況
select * from abc where ssex=“女”
2.查看選理科的同學(xué)的姓名性別文理科狀況
select *from abc where subject=“理科”
abc是視圖的名字
這么看起來(lái)好像視圖比普通的查詢少不了多少代碼,但是當(dāng)我們用到視圖部分的語(yǔ)句越多的時(shí)候,那么視圖的優(yōu)勢(shì)就越明顯,而且越簡(jiǎn)便
5.視圖的修改
第一種方式:
create or replace vive +視圖名 as + 查詢語(yǔ)句
語(yǔ)義是若該視圖名不存在那么重新創(chuàng)建一個(gè)視圖,如果存在那么新的查詢結(jié)果就會(huì)覆蓋原始數(shù)據(jù)
那么我們按照第四點(diǎn)提供的兩個(gè)表和一張名為abc的視圖舉例
我們把視圖改成只有學(xué)生的姓名和文理科:
create or replace view abc as select sname,subject from student a join aas b on a.as_id=b.id
然后視圖abc就變成了:
第二種方式:
alter view + 視圖名 as +查詢語(yǔ)句
表示的意思是查詢語(yǔ)句覆蓋已知視圖
6.視圖的刪除
drop view 視圖1,視圖2...
7.視圖的查看
desc +視圖名
或者
show create vive +視圖名
8.視圖的更新
視圖的更新是對(duì)視圖進(jìn)行增刪改,視圖的增刪改會(huì)對(duì)原圖進(jìn)行同樣的更改,視圖的可更新性和視圖的查詢有定義關(guān)系
以下的情況是不能更新:
1.包含以下關(guān)鍵字的sql語(yǔ)句:分組函數(shù),distinct,group by,having,union或union all
2.常量視圖(常量視圖代表查詢一個(gè)已經(jīng)查找好的表格或者常量等)
3.select中包含子查詢
4.join
5.from一個(gè)不能更新的視圖
6.where子句的子查詢引用了from子句中的表
注意這里的不能更新不代表增刪改的功能都不能使用,可能只具有其中一種或者幾種功能,但是統(tǒng)稱不能更新,一般的視圖的更新用的比較少
9.視圖和表格的對(duì)比
1.創(chuàng)建方式不同
2.表格占據(jù)物理空間視圖不占據(jù)物理空間(只是沒(méi)有為視圖數(shù)據(jù)沒(méi)開(kāi)辟空間進(jìn)行存儲(chǔ),但是為視圖的邏輯語(yǔ)句開(kāi)辟空間存儲(chǔ),這種說(shuō)法只是針對(duì)視圖和表的數(shù)據(jù)而言)
3.表能進(jìn)行增刪改但是視圖一般是不行的
10視圖的優(yōu)缺點(diǎn)
10.1視圖的優(yōu)點(diǎn)
1.查詢簡(jiǎn)單化。視圖能簡(jiǎn)化用戶的操作
2.數(shù)據(jù)安全性。視圖使用戶能以多種角度看待同一數(shù)據(jù),能夠?qū)C(jī)密數(shù)據(jù)提供安全保護(hù)
3.邏輯數(shù)據(jù)獨(dú)立性。視圖對(duì)重構(gòu)數(shù)據(jù)庫(kù)提供了一定程度的邏輯獨(dú)立性
10.2視圖的缺點(diǎn)
1.性能。數(shù)據(jù)庫(kù)必須把視圖的查詢轉(zhuǎn)化成對(duì)基本表的查詢,如果這個(gè)視圖是由一個(gè)復(fù)雜的多表查詢所定義,那么,即使是視圖的一個(gè)簡(jiǎn)單查詢,數(shù)據(jù)庫(kù)也把它變成一個(gè)復(fù)雜的結(jié)合體,需要花費(fèi)一定的時(shí)間。
2.修改限制。當(dāng)用戶試圖修改視圖的某些行時(shí),數(shù)據(jù)庫(kù)必須把它轉(zhuǎn)化為對(duì)基本表的某些行的修改。事實(shí)上,當(dāng)從視圖中插入或者刪除時(shí),情況也是這樣。對(duì)于簡(jiǎn)單視圖來(lái)說(shuō),這是很方便的,但是,對(duì)于比較復(fù)雜的視圖,可能是不可修改的
總結(jié)
以上是生活随笔為你收集整理的MySQL视图附带例子详解(小白都能懂哦)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MySQL数据操作(DML)详解(小白都
- 下一篇: MySQL事物(详解并发问题和隔离级别)