1. 程式人生 > >MySql檢視概念與實際應用

MySql檢視概念與實際應用

一. 檢視概述

MySQL檢視是一個虛擬表,其內容由查詢定義。同真實的表一樣,檢視包含一系列帶有名稱的列和行資料。但是,檢視並不在資料庫中以儲存的資料值集形式存在。行和列資料來自由定義檢視的查詢所引用的表,並且在引用檢視時動態生成。

對其中所引用的基礎表來說,MySQL檢視的作用類似於篩選。定義檢視的篩選可以來自當前或其它資料庫的一個或多個表,或者其它檢視。通過檢視進行查詢沒有任何限制,通過它們進行資料修改時的限制也很少。

檢視是儲存在資料庫中的查詢的sql 語句,它主要出於兩種原因:安全原因,檢視可以隱藏一些資料,如:社會保險基金錶,可以用檢視只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使複雜的查詢易於理解和使用。

MySQL檢視:檢視圖形或文件的方式。

檢視是從一個或多個表或檢視中匯出的表,其結構和資料是建立在對錶的查詢基礎上的。和表一樣,檢視也是包括幾個被定義的資料列和多個數據行,但就本質而言這些資料列和資料行來源於其所引用的表。

所以MySQL檢視不是真實存在的基礎表而是一張虛表,檢視所對應的資料並不實際地以檢視結構儲存在資料庫中,而是儲存在檢視所引用的表中。

檢視一經定義便儲存在資料庫中,與其相對應的資料並沒有像表那樣又在資料庫中再儲存一份,通過檢視看到的資料只是存放在基本表中的資料。對檢視的操作與對錶的操作一樣,可以對其進行查詢、修改(有一定的限制)、刪除。

當對通過檢視看到的資料進行修改時,相應的基本表的資料也要發生變化,同時,若基本表的資料發生變化,則這種變化也可以自動地反映到檢視中。

檢視有很多優點,主要表現在:

視點集中

簡化操作

定製資料

合併分割資料

安全性

二. 建立MySQL檢視——create view

1. 語法

create [or replace] [algorithm = {undefined | merge | temptable}] view [db_name.]view_name [(column_list)] as select_statement [with [cascaded | local] check option]通過該語句可以建立檢視,若給定了[or replace],則表示當已具有同名的檢視時,將覆蓋原檢視。select_statement是一個查詢語句,這個查詢語句可從表或其它的檢視中查詢。檢視屬於資料庫,因此需要指定資料庫的名稱,若未指定時,表示在當前的資料庫建立新檢視。

表和資料庫共享資料庫中相同的名稱空間,因此,資料庫不能包含相同名稱的表和檢視,並且,檢視的列名也不能重複。

2. 使用舉例

eg. 本例建立一個產品表(product)和一個購買記錄表(purchase),再通過MySQL檢視purchase_detail查詢出購買的詳細資訊。

  1. create table product  
  2. (  
  3. product_id int not null,  
  4. name varchar(50) not null,  
  5. price double not null  
  6. );  
  7. insert into product values(1, 'apple ', 5.5);  
  8. create table purchase  
  9. (  
  10. id int not null,  
  11. product_id int not null,  
  12. qty int not null default 0,  
  13. gen_time datetime not null  
  14. );  
  15. insert into purchase values(1, 1, 10, now());  
  16. create view purchase_detail as select product. name as name, product .price as price, purchase.qty as qty,  product .price * purchase.qty as total_value from product,  purchase where product.product_id = purchase.product_id;  

建立成功後,輸入:select * from purchase_detail;

執行效果如下:

  1. +-------+-------+-----+-------------+  
  2. | name | price | qty | total_value |  
  3. +-------+-------+-----+-------------+  
  4. | apple | 5.5 | 10 | 55 |  
  5. +-------+-------+-----+-------------+  
  6. 1 row in set (0.01 sec)  

3. 注意事項

建立檢視存在如下注意事項:

(1) 執行建立檢視的語句需要使用者具有建立檢視(crate view)的許可權,若加了[or replace]時,還需要使用者具有刪除檢視(drop view)的許可權;

(2) select語句不能包含from子句中的子查詢;

(3) select語句不能引用系統或使用者變數;

(4) select語句不能引用預處理語句引數;

(5) 在儲存子程式內,定義不能引用子程式引數或區域性變數;

(6)在定義中引用的表或檢視必須存在。但是,建立了MySQL檢視後,能夠捨棄定義引用的表或檢視。要想檢查檢視定義是否存在這類問題,可使用check table語句;

(7) 在定義中不能引用temporary表,不能建立temporary檢視;

(8) 在檢視定義中命名的表必須已存在;

(9) 不能將觸發程式與檢視關聯在一起;

(10) 在檢視定義中允許使用order by,但是,如果從特定檢視進行了選擇,而該檢視使用了具有自己order by的語句,它將被忽略。

三. 修改MySQL檢視——alter view

1. 語法

alter [algorithm = {undefined | merge | temptable}] view view_name [(column_list)] as select_statement [with [cascaded | local] check option]該語句用於更改已有檢視的定義。其語法與create view類似。

2. 使用舉例

eg. 將上一小節中中建立的視purchase_detail進行修改,去掉qty列,語句如下:

  1. alter view purchase_detail as select product. name as name, product .price as price, product . price * purchase.qty as total_value from product,  purchase where product.product_id = purchase.product_id;  

以上的相關內容就是對MySQL檢視的介紹,望你能有所收穫。