1. 程式人生 > >MySQL入門很簡單-檢視

MySQL入門很簡單-檢視

1、檢視是從一個或多個表中匯出的表,是虛擬的表。通過檢視可以看到系統專門提供的資料,作用是方便使用者對資料的操作。      檢視可以從存在的檢視的基礎上定義。資料庫只存放檢視的定義,不存放檢視中的資料,資料存放在原來的表。使用檢視查詢資料時,資料庫系統從原來的表中取出對應的資料。      如果經常需要從多個表查詢指定欄位的資料,可以在表上建立檢視,通過這個檢視顯示資料。如果表中修改了與檢視相關的欄位的名稱,可以修改檢視。      MySQL檢視不支援輸入引數的功能。 2、檢視的作用:      使操作簡單化,達到所見即所需的目的。檢視可以簡化對資料的操作。      增加資料的安全性,通過檢視,使用者只能查詢和修改指定的資料。資料庫授權命令可以限制使用者的操作許可權,但不能限制到特定行和列上,使用檢視則可以將使用者的許可權限制到特定的行和列上,以保證敏感資訊不被沒有許可權的人看到。      提高表的邏輯獨立性,可以遮蔽原有表結構變化帶來的影響。原有表增加列和刪除未被引用的列,對檢視不造成影響;如果修改了表中的列,可修改檢視來解決這些列帶來的影響。 3、建立檢視      create [algorithm={undefined | merge | temptable}]                 view 檢視名 [(屬性清單)]                as select 語句 [with [cascaded | local ] check option];      algorithm是可選引數,表示檢視的選擇演算法。undefined選項表示mysql將自動選擇使用的演算法;merge選項表示將使用檢視的語句和檢視的定義合併起來,使檢視定義的某一部分取代語句的對應部分;temptable選項表示將檢視的結果存入臨時表,使用臨時表執行語句。      檢視名是要建立的檢視的名稱,屬性清單是可選引數,指定了檢視中各個屬性的名詞,預設與select語句中查詢的屬性相同。      select語句引數是一個完整的查詢語句,表示從某個表中查出滿足條件的記錄,將這些記錄匯入檢視中。      with check option是可選引數,表示更新檢視時要保證在該檢視的許可權範圍內。      cascaded是可選引數,表示更新檢視時要滿足所有相關檢視和表的條件,該引數是預設值;Local表示更新檢視時,要滿足該檢視本身的定義的條件即可。      使用create view語句建立檢視時,最好加上with check option並且加上cascaded引數,以便於在檢視上派生出新檢視後,更新檢視需要考慮其父檢視的約束條件。      建立檢視時需要有相應的許可權,MySQL的user表儲存了許可權資訊,查詢語句為: select Select_priv,Create_view_priv from mysql.user where user ='使用者名稱'      select Select_priv,Create_view_priv from mysql.user where user ='root';  // 4、在單表上建立檢視      create view department_view1 as select * from department;  //檢視是虛擬表,可以使用desc查詢表結構      create view department_view2(name, function, location) as select d_name, function, address from department;      create algorithm=merge
view worker_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;  //建立多表檢視 5、檢視檢視      檢視資料庫中已存在的檢視的定義。檢視檢視必須要有show view許可權,也在user表中。方法包括describe語句,show table status語句,show create view語句
和查詢information_schema資料庫下的views表等。      describe worker_view1;  //或者是 desc worker_view1;  describe語句用於檢視檢視中各個欄位的簡單資訊      show table status like 'worker_view1';   //該語句顯示檢視的基本資訊,但各屬性值顯示的是NULL,comment屬性顯示值是view;很少使用      show create view worker_view1\G   //可以檢視檢視的詳細資訊,包括各個屬性, with check option條件和字元編碼(character_set_client)等資訊      select * from information_schema.views;  //所有的檢視都是儲存在information_schema資料庫下的views表中 6、修改檢視      修改檢視是指修改資料庫中已存在的表的定義,當基本表的某些欄位發生改變時,可以通過修改檢視來保持檢視和基本表之間一致。           create or replace [algorithm={undefined | merge | temptable}]                 view 檢視名 [(屬性清單)]                as select 語句 [with [cascaded | local ] check option];   //存在檢視時對檢視進行修改,不存在則建立檢視      create or replace algorithm=temptable
view department_view1(department, function, location) as select d_name, function, address from department;      alter [algorithm={undefined | merge | temptable}]                 view 檢視名 [(屬性清單)]                as select 語句 [with [cascaded | local ] check option];      alter view department_view2(department, name, sex, location) as select d_name, worker.name, worker.sex, address from department, worker where department.d_id=worker.d_id with check option; 7、更新檢視      是指通過檢視來插入、更新和刪除表中的資料。通過檢視更新時,都是轉換到基本表來更新。更新檢視時,只能更新許可權範圍內的資料。      create view depertment_view3(name, function, address) as select d_name, function, address from department where d_id = 1001;      update department_view3 set name ='科研部', function='新產品研發', address='3號樓5層';      不是所有的檢視都可以更新:      create view worker_view4(name, sex, total) as selct name, sex, count(name) from worker;  //包含SUM,COUNT,MAX,MIN等函式      create view worker_view5(name, sex, address) as selct name, sex, address from worker group by d_id;  //包含UNION, UNION ALL, DISTINCT, GROUP BY和HAVING等關鍵字      create view worker_view6 as select 'Aric' as name;  //常量檢視也不能更新      create view worker_view7(name) as select (select name from worker);  //檢視中的SELECT包含子查詢      create view worker_view8 as select * from worker_view7;   //由不可更新的檢視匯出的檢視      create algorithm=temptable view worker_view9 as select * from worker;    // 建立檢視時,ALGORITHM為TEMPTABLE型別的檢視也不能更新,系統預設臨時表不能更新      檢視對應的表上存在沒有預設值的列,且該列沒有包含在視圖裡,則檢視不能更新。在更新檢視時,沒有預設值的記錄將沒有值插入也不插入NULL,系統不允許      with [cascaded | local] check option也能決定檢視能否更新,更新檢視時需要滿足檢視或表定義的條件。 8、刪除檢視      刪除資料庫中已存在的檢視,刪除檢視必須具有drop許可權,不刪除資料。      drop view [if exists] 檢視名列表 [restrict | cascade];    //if exists判斷檢視是否存在,存在則執行      select Drop_priv from mysql.user where user = '使用者名稱'; 9、MySQL中檢視和表的區別和聯絡      區別:檢視是按照SQL語句生成的虛擬表,不佔用物理空間;表中的記錄需要佔用物理空間。建立和刪除檢視隻影響檢視本身,不影響實際的記錄。建立和刪除表會影響實際的記錄。      聯絡:檢視是基本表上建立的表,欄位和記錄都來自基本表,依賴基本表存在。一個檢視可以對應一個基本表也可以對應多個表。檢視是基本表的抽象,在邏輯意義上建立新關係。