MySQL基礎-檢視
阿新 • • 發佈:2020-06-27
一、檢視
1.1概念:
- 檢視是 MySQL 在 5.0.1 版本中加入的功能。它可以理解為一個虛表。
- 之所以被稱為虛表,是因為它只是儲存了一個結構,並不儲存真實的資料。它的資料是在查詢過程中動態生成的。
- 檢視並不是真的優化
//CRUD select id,user_name,email from `user`; //建立檢視 create VIEW user_view as select id,user_name,email from `user`;1.3檢視檢視:和表一樣,我們可以用 desc 檢視名;來檢視檢視的每一列
desc user_view;//檢視建立的檢視語法 show create view user_view; //查詢檢視內容 select * from user_view;
>注意:檢視查詢的資料實則來自與源資料中的內容,而它本質是一個儲存了一個結構,並不是儲存真實的資料。
>比如:如同PHP中的一個查詢方法的封裝 1.4檢視優點:- 第一個顯著優點就是它簡化了操作。此時我們完全不用關心檢視是怎麼處理資料的,我們只需要知道如何使用這個結果集即可,檢視相當於一箇中間層。
- 第二個顯著優點就是它更加安全。比如我們可以讓使用者有權去訪問某個檢視,但是不能訪問原表,這樣就可以起到保護原表中某些資料的作用。
- 我們之後會接觸到管理許可權,許可權是無法細緻到某一個列的,通過檢視,則很容易實現。
- 第三個顯著優點就是降低耦合。假如我們以後要修改原表的結構,那麼我們可以通過修改檢視的定義即可,而不用修改應用程式,對訪問者是不會造成影響 的,一般來說,這樣代價會更小。
1.5檢視缺點:
- 表結構修改則需要手動修改檢視
- 檢視並不能對查詢優化,因此在處理大資料的時候,甚至會對效能有些影響。
1.6檢視IUD:表是可以更新資料的,這裡的更新,指的是”增刪改”,但是對於檢視來說不一定。
update `user` set email = '[email protected]' where id = 1; select * from user_view; //刪除檢視 DROP VIEW user_view_2;
- 包含聚合函式、distinct、group by、having、union、union all。
- 常量檢視。
- select 包含子查詢。
- 包含連線操作。
- from 一個不能更新的檢視。
- where 子句的子查詢引用了 from 子句中的表。
- 提高了重用性,就像一個函式
//如果要頻繁獲取user的name和goods的name。就應該使用以下sql語言。 //示例: select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id; //但有了檢視就不一樣了,建立檢視other。 //示例: create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id; //建立好檢視後,就可以這樣獲取user的name和goods的name。 //示例: select * from other; //以上sql語句,就能獲取user的name和goods的name了。
-
對資料庫重構,卻不影響程式的執行
//假如因為某種需求,需要將user拆房表usera和表userb,該兩張表的結構如下 //測試表:usera有id,name,age欄位 //測試表:userb有id,name,sex欄位 //這時如果php端使用sql語句: select * from user; //那就會提示該表不存在,這時該如何解決呢。 //解決方案:建立檢視。 //以下sql語句建立檢視: create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name; //以上假設name都是唯一的。 //此時php端使用sql語句: select * from user; //就不會報錯什麼的。這就實現了更改資料庫結構,不更改指令碼程式的功能了。
-
提高了安全效能。可以對不同的使用者
//設定不同的檢視。例如:某使用者只能獲取user表的name和age資料,不能獲取sex資料。則可以這樣建立檢視。 //示例 如下: create view other as select a.name, a.age from user as a; //這樣的話,使用sql語句: select * from other; //最多就只能獲取name和age的資料,其他的資料就獲取不了了。
- 讓資料更加清晰想要什麼樣的資料,就建立什麼樣的檢視。經過以上三條作用的解析,這條作用應該很容易理解了吧