1. 程式人生 > 實用技巧 >MySQL基礎-檢視

MySQL基礎-檢視

一、檢視

1.1概念:

  1. 檢視是 MySQL 在 5.0.1 版本中加入的功能。它可以理解為一個虛表。
  2. 之所以被稱為虛表,是因為它只是儲存了一個結構,並不儲存真實的資料。它的資料是在查詢過程中動態生成的。
  3. 檢視並不是真的優化
1.2建立檢視:檢視 只是儲存了一個結構,並不儲存真實的資料。
//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. 第一個顯著優點就是它簡化了操作。此時我們完全不用關心檢視是怎麼處理資料的,我們只需要知道如何使用這個結果集即可,檢視相當於一箇中間層。
  2. 第二個顯著優點就是它更加安全。比如我們可以讓使用者有權去訪問某個檢視,但是不能訪問原表,這樣就可以起到保護原表中某些資料的作用。
  3. 我們之後會接觸到管理許可權,許可權是無法細緻到某一個列的,通過檢視,則很容易實現。
  4. 第三個顯著優點就是降低耦合。假如我們以後要修改原表的結構,那麼我們可以通過修改檢視的定義即可,而不用修改應用程式,對訪問者是不會造成影響 的,一般來說,這樣代價會更小。

1.5檢視缺點:

  1. 表結構修改則需要手動修改檢視
  2. 檢視並不能對查詢優化,因此在處理大資料的時候,甚至會對效能有些影響。

1.6檢視IUD:表是可以更新資料的,這裡的更新,指的是”增刪改”,但是對於檢視來說不一定。

update `user` set email = '[email protected]' where id = 1; select * from user_view;
//刪除檢視
DROP VIEW user_view_2;
以下是檢視不可更新的情況
  1. 包含聚合函式、distinct、group by、having、union、union all。
  2. 常量檢視。
  3. select 包含子查詢。
  4. 包含連線操作。
  5. from 一個不能更新的檢視。
  6. where 子句的子查詢引用了 from 子句中的表。
1.7 檢視應用&好處
  1. 提高了重用性,就像一個函式
    //如果要頻繁獲取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了。
  2. 對資料庫重構,卻不影響程式的執行
    //假如因為某種需求,需要將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;
    //就不會報錯什麼的。這就實現了更改資料庫結構,不更改指令碼程式的功能了。
  3. 提高了安全效能。可以對不同的使用者
    //設定不同的檢視。例如:某使用者只能獲取user表的name和age資料,不能獲取sex資料。則可以這樣建立檢視。
    //示例 如下:
    create view other as select a.name, a.age from user as a; 
    //這樣的話,使用sql語句:
    select * from other; 
    //最多就只能獲取name和age的資料,其他的資料就獲取不了了。
  4. 讓資料更加清晰想要什麼樣的資料,就建立什麼樣的檢視。經過以上三條作用的解析,這條作用應該很容易理解了吧