1.為什么使用視圖: 
    為了提高復雜SQL語句的復用性和表操作的安全性(例如:工資字段不想展示給所有能查看該查詢結果的人),MySQL提供了視圖特性。所謂視圖,本質上是一種虛擬表,其內容與真實的表相似,包含一系列帶有名稱的列和行數據。但是,視圖并不在數據庫中以存儲數據值的形式存在。行和列的數據來自定義視圖的查詢所引用基本表,并且在具體使用視圖時動態生成。 
視圖有如下特點; 
      1. 視圖的列可以來自不同的表,是表的抽象和邏輯意義上建立的新關系。 
      2. 視圖是由基本表(實表)產生的表(虛表)。 
      3. 視圖的建立和刪除不影響基本表。 
      4. 對視圖內容的更新(添加、刪除和修改)直接影響基本表。 
      5. 當視圖來自多個基本表時,不允許添加和刪除數據。
2.創建視圖: 
在創建視圖時,首先要確保擁有CREATE VIEW的權限,并且同時確保對創建視圖所引用的表也具有相應的權限。 
2.1 創建視圖的語法形式: 
    雖然視圖可以被看成是一種虛擬表,但是其在物理上是不存在的,即數據庫管理系統沒有專門的位置為視圖存儲數據。根據視圖的概念發現其數據來源于查詢語句,因此創建視圖的語法為:
CREATE VIEW view_name AS 查詢語句
//說明:和創建表一樣,視圖名不能和表名、也不能和其他視圖名重名。視圖的功能實際就是封裝了復雜的查詢語句。
示例:
| use zhaojd_test; //選擇一個自己創建的庫create table t_product( //創建表 id int primary key, pname varchar(20), price decimal(8,2)); insert into t_product values(1,'apple',6.5); //向表中插入數據insert into t_product values(2,'orange',3); //向表中插入數據create view view_product as select id,name from t_product; //創建視圖select * from view_product; | 
結果為:
+------+--------+
| id   | name   |
+------+--------+
| 1    | apple  |
| 2    | orange |
+------+--------+
//其實在創建視圖時實際代碼里寫的是一個表查詢語句,只不過把這個查詢語句封裝起來重新起了一個名字,方便可以重復使用。
//再者,安全性方面可以隱藏一些不希望看到的字段,比如這里的價格字段。
//注意:在SQL語句的命名規范中,視圖一般以view_xxx或者v_xxx的樣式來命名。視圖的查詢語句和表的查詢語句相同。
2.2 創建各種視圖: 
    由于視圖的功能實際上時封裝查詢語句,那么是不是任何形式的查詢語句都可以封裝在視圖中呢?             
新聞熱點
疑難解答