1. 程式人生 > >mysql學習之路_視圖

mysql學習之路_視圖

tro 大型 algorithm 來源 數據安全 span 情況 大型項目 隱藏

視圖

視圖:view是一種有結構的但是沒有結構來源的虛擬表,虛擬表的結構來源不是自己定義的而是從對應的基表中產生(來源)

創建視圖

基本語法:

Create view 視圖名字 as select 語句

可以是普通查詢,也可以是連接查詢,聯合查詢,子查詢。

創建單表視圖:

基表只有一個

例:create view my_view as select *from my_class;

創建多表查詢

基表有多個

查看視圖:

查看視圖結構

視圖是一張虛擬表,表的查看方式適用於

視圖:show tables ,desc 表名

Show create table 表名\G

視圖與表還是有一個關鍵字的區別:

view

查看表(視圖)的創建語句的時候可以使用view關鍵字

視圖一旦創建:系統就會在視圖對應的數據庫文件夾下創建一個對應的結構文件:frm文件

使用視圖

使用視圖:主要是為了子查詢:將視圖做為表一樣

查詢:視圖的執行:其實本質就是執行封裝的select語句

修改視圖:

視圖本身不可修改,但是視圖的來源可以修改

修改視圖:修改視圖本身的來源語句(select 語句)

Alter view視圖名字 as 新的select語句

例:alter view my_view as select id,name,age,sex from my_stu;

刪除視圖

Drop view 視圖名字;

視圖的意義

1,視圖可以節省sql語句:將一條復雜的查詢語句使用視圖進行保存,以後可以直接對視圖進行操作;

2,數據安全:視圖操作是主要針對查詢,如果對視圖結果進行處理(刪除)不會影響基表數據(相對安全)

3,視圖往往是在大型項目中使用,而且是多系統使用,對外提供有效有用的數據隱藏關鍵(無用的)數據,數據安全。

4,視圖對外提供友好型,不同的視圖提供不同的數據,對外好像是專門設計

5,視圖可以更好地進行權限控制

視圖數據操作

視圖可以進行很多數據寫操作:但是有限制,將數據直接在視圖上進行操作

新增數據

數據新增直接對數據進行新增

1,多表數據不能進行新增操作

2,可以向單表視圖插入數據,但是視圖中包含的字段必須有基表所不能為空(或者沒有默認值)字段

3,視圖可以向基表插入數據(不應該給權限)

刪除數據

1,多表視圖不能刪除數據

2,單表視圖可以刪除數據(對基表進行操作)delete from my_view2 where id=2

更新數據

理論上單表與多表視圖都可以更新數據庫

Update my_view1 set id=3 where id=2;

更新限制:with check option 如果對視圖在新增的時候,限定了某個字段有限制;那麽在對視圖進行數據更新操作之後,數據依然可以被實體查詢出來,否則不更新。

例:select * from my_stu where age>30 with check option---表視圖數據來源年齡不能>30歲,with check option 決定更新的時候不能將age >30改成<30

視圖算法

系統對視圖以及外部查詢視圖select語句的一種解析方法。

視圖算法有三種

1,undefind:未定義(默認的),這不是實際使用算法,推卸責任的算法告訴系統,視圖沒有定義算法,自己看著辦吧!

2,Temptable:臨時算法,系統應該先執行視圖的select語句,後執行外部查詢語句

3,Merge:合並算法,系統應該先將視圖對應的select語句與外部查詢視圖的select語句進行合並;然後執行(效率高,常態);

算法指定:創建視圖的時候

Create algorithm =指定算法 view 視圖名字 as select 語句;

視圖算法的選擇

如果視圖的select語句中包含一個查詢子句(五子句???)而且很有肯比外部查詢語句要靠後,一定要使用temptable 其他情況不指定。

mysql學習之路_視圖