視圖概念:
視圖是指計算機數據庫中的虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖並不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,並且在引用視圖時動態生成。詳見 視圖 百度百科,其對視圖的分類和優點有詳細的解釋此處不再贅述。
視圖創建:
create view view_name as select 列1,列2, ...... from 表名
我們可以把視圖理解爲一個預先定義好的子查詢,比如上面的語句中,如果我們把create 換成select那就相當好理解了。select * from select col_1,col_2 from tbl_1 as temp
而事實上,視圖的工作原理與這種子查詢產生的臨時表是一樣的,只有在用到視圖的時候,纔會根據原表去動態生成虛擬表。所以視圖的數據會根據原表的數據變動而變動。
舉例
`create table employee (
id int primary key auto_increment,
name varchar(20) not null,
salary decimal(10,2) not null default 1000
);
create view v_emp as select id,name from employee;`
mysql> desc v_emp;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(11) | NO | | 0 | |
| name | varchar(20) | NO | | NULL | |
+-------+-------------+------+-----+---------+-------+
可以看到我們創建的視圖v_emp,成功的隱藏了員工的工資字段salary
視圖管理
刪除視圖
drop view [if exists] view_name
修改視圖
alter view v_view_name as select * from tbl_1
修改視圖結構
alter view v_view_name (col_1,col_2...) as select a,b from tbl_1
這樣不但可以對外隱藏表名還可以隱藏字段名。
注意
視圖對查詢操作支持的最好,對增刪改有一定的限制,比如多表聯合組成的視圖,而由單個表創建出的視圖在插入數據時,視圖中未包含的原表中的字段或者有默認值,或者允許爲空。這樣纔可以保證操作成功。