iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
1

View是一種虛擬的表,並沒有真的存在於資料庫中,表的內容來自於查詢其他的表(table),對使用者來說,不需要再擔心篩選條件,因為在建立View時都已經篩選好了,對於管理者來說也十分方便,只要利用View將使用者需要查看的資料選好,富有更多的安全性。

若在建立view時,使用以下語法將會無法更新或新增內容。

  • 加總函式、Distinct、having、group by、union等
  • Join
  • Select包含子查詢
  • Where的子查詢用from語句的表

View有一個check的選項,可以選擇casaded或是Local,預設是casaded,那這是甚麼功用呢,如果選擇casaded,要更新資料時,必須要滿足from中所有view的條件才可以更新,local則是只要滿足自己的條件。

我們直接來測試看看有哪裡不一樣呢?

查看原始資料

mysql> select * from t1;

https://ithelp.ithome.com.tw/upload/images/20200913/20129969nisbC67kNL.png

建立第一層view
Show tables會顯示view名稱

mysql> create view t1_view as
    -> select * from t1 where id<5;
mysql> show tables;

https://ithelp.ithome.com.tw/upload/images/20200913/20129969qITF9c1pGC.png

查看t1_view

mysql> select * from t1_view;

https://ithelp.ithome.com.tw/upload/images/20200913/20129969tXkxRFzLmT.png
建立第二層view使用check option local

mysql> create view t1_viewlocal as select * from t1_view where id>2 with local check option;
mysql> select * from t1_viewlocal;

https://ithelp.ithome.com.tw/upload/images/20200913/20129969bhfifHiQWh.png
建立第二層view使用check option cascade

mysql> create view t1_viewcascaded as select * from t1_view where idd>2 with cascaded check option;
mysql> select * from t1_viewcascaded;

https://ithelp.ithome.com.tw/upload/images/20200913/20129969ULBbDhFi6O.png

再來我們在view(t1_viewlocal& t1_viewcascaded)新增一個id> 5的人員(不滿足t1_view條件)。

t1_viewlocal

mysql> insert into t1_viewlocal values(6,'john','msi');

能夠新增資料但在view無法查看,因為篩選條件id<5
https://ithelp.ithome.com.tw/upload/images/20200913/20129969LGYQGd87Id.png

t1_viewlcascaded

mysql> insert into t1_viewcascaded values(6,'john','msi');

因為不滿足t1_view條件,所以無法新增資料。

https://ithelp.ithome.com.tw/upload/images/20200913/20129969LhpGp0E9ol.png

這樣大家對View有沒有稍微了解一點了呢!


上一篇
《Day11》認識MySQL索引
下一篇
《Day13》打造MySQL Replication
系列文
一名合格的DBA要從底層一步步爬起30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言