標籤:
視圖由資料庫中的一個或多個表匯出的虛擬表,使用者可以不用看到整個資料庫表中的資料而只關心對自己有用的資料,也保障了資料庫系統的安全性。資料庫只存放視圖的定義,其資料來源於原來的表中。所以源表中資料改變,視圖的資料也會改變。視圖可以簡化重複的查詢操作,增加資料的安全性。
1.建立視圖
create [algorithm={undefined|merge|temptable}] view 視圖名 [(屬性清單)] as select 語句 [with [cascaded|local] check option];
algorithm:選擇性參數,表示視圖選擇的演算法。視圖名:要建立視圖的名稱。select語句:一個完整的查詢語句,並將滿足條件的記錄匯入到視圖中。cascaded:表示更新視圖時要滿足所有相關視圖和表的條件。在使用create view 時最好加上with check option參數+cascaded,更新視圖需要考慮其父視圖的約束條件。這種方式比較嚴格,可以保證資料的安全性。
(1).查詢是否具有CREATE VIEW許可權
SELECT Select_priv,Create_view_priv FROM mysql.user WHERE user=‘root‘;
(2).在表test0上建立一個簡單視圖
create view test0_view1 as select id,name from test0;
desc test0_view1;//查看視圖
show table status like ‘視圖名‘ \G; //查看視圖基本資料,comment為view還是空是視圖和普通表最直接的區別。
show create view 視圖名 \G; //可以查看視圖的詳細定義。
2.在多表上建立視圖
create algorithm=merge view woker_view1(name,department,sex,age,address) as select name,department.d_name,sex,2009-birthday,address from worker,department where worker.d_id=department.d_id with local check option;
3.修改視圖
(1).create or replace
create or replace [algorithm={undefined|merge|temptable}] view 視圖名 [(視圖清單)] as select 語句 [with [cascaded|local]check option]
eg: create or replace algorithm=temptable view example_view2(id,use_id) as select id,use_id from example;
(2)alter view
eg:alter view example2_view1(stu_id,grade) as select stu_id,grade from example2;
4.更新視圖:通過視圖來insert ,update,delete表中的資料,對應的是源表資料。將視圖作為查詢資料的虛表而不要通過視圖來更新資料。
(1). update 視圖名 set 屬性名稱1=新值1,屬性名稱2=新值2;
a.不能更新視圖情況:
1).視圖中包含:sum(),count(),max(),min()等函數.
eg:create view worker_view4(name,sex,total) as select name,sex,count(name) from worker;
2).視圖中包含union,union all,distinct,group by和havig等關鍵字.
eg:create view worker_view5(name,sex,address) as select name,sex from worker group by d_id;
5.刪除視圖
drop view [if exists] 視圖名列表 [pestrict|cascade];
if exists:判斷視圖存在,如果存在則執行,不存在則不執行。
MySQL基本操作-視圖