1、視圖概念
- 視圖是存在內存中的臨時表
- 視圖的建立依賴select語句,因此就是select語句操做的結果造成的表
- 視圖支持對數據的增刪改查,增刪改本質是直接對建立視圖的真實表進行操做
- 視圖不容許對視圖表的字段作修改
- 視圖不只支持建立,也支持更新與刪除
2、視圖實例
2.1 語法
1.只是建立:create view 視圖名[(別名們)] as select 語句;
2.沒有表的時候是create,不然替換表:create or replace 視圖名[(別名們)] as select 語句;
3.用來修改已有的視圖:alter 視圖名[(別名們)] as select 語句;
2.2 實例
基於emp表,表數據以下:
mysql> select * from emp;
+----+------+------+------+--------+--------+-----------+-----------+
| id | name | sex | age | salary | area | addr | dep |
+----+------+------+------+--------+--------+-----------+-----------+
| 1 | aaa | 男 | 42 | 10.5 | 上海 | 浦東 | 教職部 |
| 2 | bbb | 男 | 38 | 9.4 | 山東 | 濟南 | 教學部 |
| 3 | ccc | 女 | 30 | 3 | 江蘇 | 張家港 | 教學部 |
| 4 | ddd | 女 | 28 | 2.4 | 廣州 | 廣東 | 教學部 |
| 5 | eee | 男 | 28 | 2.4 | 江蘇 | 蘇州 | 教學部 |
| 6 | fff | 男 | 18 | 8.8 | 中國 | 黃浦 | 諮詢部 |
| 7 | ggg | 男 | 18 | 8.8 | 安徽 | 宣城 | 教學部 |
| 8 | hhh | 男 | 28 | 9.8 | 安徽 | 巢湖 | 教學部 |
| 9 | iii | 女 | 36 | 1.2 | 安徽 | 蕪湖 | 諮詢部 |
| 10 | jjj | 男 | 36 | 5.8 | 山東 | 濟南 | 教學部 |
| 11 | kkk | 女 | 28 | 1.2 | 山東 | 青島 | 教職部 |
| 12 | lll | 男 | 30 | 9 | 上海 | 浦東 | 諮詢部 |
| 13 | mmm | 男 | 30 | 6 | 上海 | 浦東 | 諮詢部 |
| 14 | nnn | 男 | 30 | 6 | 上海 | 浦西 | 教學部 |
| 15 | ooo | 女 | 67 | 2.501 | 上海 | 陸家嘴 | 教學部 |
+----+------+------+------+--------+--------+-----------+-----------+
1、建立表實例
1.建立視圖v1(用來查詢每一個部門的最高薪資)
# 直接用select語句的結果顯示的字段做爲視圖v1的字段名
create view v1 as select dep,max(salary) from emp group by dep;
mysql> select * from v1;
+-----------+-------------+
| dep | max(salary) |
+-----------+-------------+
| 諮詢部 | 9 |
| 教學部 | 9.8 |
| 教職部 | 10.5 |
+-----------+-------------+
# 用dep_name,max_salary 來做爲視圖的字段
create view v1(dep_name,max_salary) as select dep,max(salary) from emp group by dep;
mysql> select * from v1;
+-----------+------------+
| dep_name | max_salary |
+-----------+------------+
| 諮詢部 | 9 |
| 教學部 | 9.8 |
| 教職部 | 10.5 |
+-----------+------------+
2.建立或替換視圖
create or replace view v1(depname,maxname) as select dep, max(salary) from emp group by dep;
mysql> select * from v1;
+-----------+---------+
| depname | maxname |
+-----------+---------+
| 諮詢部 | 9 |
| 教學部 | 9.8 |
| 教職部 | 10.5 |
+-----------+---------+
3.直接修改已有的視圖
alter view v1(name,salary) as select dep,max(salary) from emp group by dep;
mysql> select * from v1;
+-----------+--------+
| name | salary |
+-----------+--------+
| 諮詢部 | 9 |
| 教學部 | 9.8 |
| 教職部 | 10.5 |
+-----------+--------+
2、視圖改操做
- 前提:視圖的增刪改操做能夠直接映射給真實表(本質就是對真實表進行操做)
1.先建立一個視圖v2(顯示emp表的id,name,age,salary)
create or replace view v2 as select id,name,age,salary from emp;
mysql> select * from v2;
+----+------+------+--------+
| id | name | age | salary |
+----+------+------+--------+
| 1 | aaa | 42 | 10.5 |
| 2 | bbb | 38 | 9.4 |
| 3 | ccc | 30 | 3 |
| 4 | ddd | 28 | 2.4 |
| 5 | eee | 28 | 2.4 |
| 6 | fff | 18 | 8.8 |
| 7 | ggg | 18 | 8.8 |
| 8 | hhh | 28 | 9.8 |
| 9 | iii | 36 | 1.2 |
| 10 | jjj | 36 | 5.8 |
| 11 | kkk | 28 | 1.2 |
| 12 | lll | 30 | 9 |
| 13 | mmm | 30 | 6 |
| 14 | nnn | 30 | 6 |
| 15 | ooo | 67 | 2.501 |
+----+------+------+--------+
2.更新v2的數據,把v2視圖id爲1的人 的salary+1(今後處咱們能夠發現咱們直接對視圖進行修改,回影響真實表)
update v2 set salary=salary+1 where id=1;
mysql> select * from v2;
+----+------+------+--------+
| id | name | age | salary |
+----+------+------+--------+
| 1 | aaa | 42 | 12.5 |
| 2 | bbb | 38 | 9.4 |
| 3 | ccc | 30 | 3 |
| 4 | ddd | 28 | 2.4 |
| 5 | eee | 28 | 2.4 |
| 6 | fff | 18 | 8.8 |
| 7 | ggg | 18 | 8.8 |
| 8 | hhh | 28 | 9.8 |
| 9 | iii | 36 | 1.2 |
| 10 | jjj | 36 | 5.8 |
| 11 | kkk | 28 | 1.2 |
| 12 | lll | 30 | 9 |
| 13 | mmm | 30 | 6 |
| 14 | nnn | 30 | 6 |
| 15 | ooo | 67 | 2.501 |
+----+------+------+--------+
mysql> select * from emp;
+----+------+------+------+--------+--------+-----------+-----------+
| id | name | sex | age | salary | area | addr | dep |
+----+------+------+------+--------+--------+-----------+-----------+
| 1 | aaa | 男 | 42 | 12.5 | 上海 | 浦東 | 教職部 |
| 2 | bbb | 男 | 38 | 9.4 | 山東 | 濟南 | 教學部 |
| 3 | ccc | 女 | 30 | 3 | 江蘇 | 張家港 | 教學部 |
| 4 | ddd | 女 | 28 | 2.4 | 廣州 | 廣東 | 教學部 |
| 5 | eee | 男 | 28 | 2.4 | 江蘇 | 蘇州 | 教學部 |
| 6 | fff | 男 | 18 | 8.8 | 中國 | 黃浦 | 諮詢部 |
| 7 | ggg | 男 | 18 | 8.8 | 安徽 | 宣城 | 教學部 |
| 8 | hhh | 男 | 28 | 9.8 | 安徽 | 巢湖 | 教學部 |
| 9 | iii | 女 | 36 | 1.2 | 安徽 | 蕪湖 | 諮詢部 |
| 10 | jjj | 男 | 36 | 5.8 | 山東 | 濟南 | 教學部 |
| 11 | kkk | 女 | 28 | 1.2 | 山東 | 青島 | 教職部 |
| 12 | lll | 男 | 30 | 9 | 上海 | 浦東 | 諮詢部 |
| 13 | mmm | 男 | 30 | 6 | 上海 | 浦東 | 諮詢部 |
| 14 | nnn | 男 | 30 | 6 | 上海 | 浦西 | 教學部 |
| 15 | ooo | 女 | 67 | 2.501 | 上海 | 陸家嘴 | 教學部 |
+----+------+------+------+--------+--------+-----------+-----------+
3.修改真實表emp的數據,也會影響視圖
update emp set salary=salary+1 where id=1;
mysql> select * from v2;
+----+------+------+--------+
| id | name | age | salary |
+----+------+------+--------+
| 1 | aaa | 42 | 13.5 |
| 2 | bbb | 38 | 9.4 |
| 3 | ccc | 30 | 3 |
| 4 | ddd | 28 | 2.4 |
| 5 | eee | 28 | 2.4 |
| 6 | fff | 18 | 8.8 |
| 7 | ggg | 18 | 8.8 |
| 8 | hhh | 28 | 9.8 |
| 9 | iii | 36 | 1.2 |
| 10 | jjj | 36 | 5.8 |
| 11 | kkk | 28 | 1.2 |
| 12 | lll | 30 | 9 |
| 13 | mmm | 30 | 6 |
| 14 | nnn | 30 | 6 |
| 15 | ooo | 67 | 2.501 |
+----+------+------+--------+
3、視圖增操做
1.從新以v3這個視圖爲例(顯示emp的全部數據)
create or replace view v3 as select * from emp;
2.給視圖v3增長一條數據
insert into v3 values(16, 'cecilia', '女',18, 1.51, '上海', '浦東', '教職部');
mysql> select * from v3; 職部');;
+----+---------+------+------+--------+--------+-----------+-----------+
| id | name | sex | age | salary | area | addr | dep |
+----+---------+------+------+--------+--------+-----------+-----------+
| 1 | aaa | 男 | 42 | 13.5 | 上海 | 浦東 | 教職部 |
| 2 | bbb | 男 | 38 | 9.4 | 山東 | 濟南 | 教學部 |
| 3 | ccc | 女 | 30 | 3 | 江蘇 | 張家港 | 教學部 |
| 4 | ddd | 女 | 28 | 2.4 | 廣州 | 廣東 | 教學部 |
| 5 | eee | 男 | 28 | 2.4 | 江蘇 | 蘇州 | 教學部 |
| 6 | fff | 男 | 18 | 8.8 | 中國 | 黃浦 | 諮詢部 |
| 7 | ggg | 男 | 18 | 8.8 | 安徽 | 宣城 | 教學部 |
| 8 | hhh | 男 | 28 | 9.8 | 安徽 | 巢湖 | 教學部 |
| 9 | iii | 女 | 36 | 1.2 | 安徽 | 蕪湖 | 諮詢部 |
| 10 | jjj | 男 | 36 | 5.8 | 山東 | 濟南 | 教學部 |
| 11 | kkk | 女 | 28 | 1.2 | 山東 | 青島 | 教職部 |
| 12 | lll | 男 | 30 | 9 | 上海 | 浦東 | 諮詢部 |
| 13 | mmm | 男 | 30 | 6 | 上海 | 浦東 | 諮詢部 |
| 14 | nnn | 男 | 30 | 6 | 上海 | 浦西 | 教學部 |
| 15 | ooo | 女 | 67 | 2.501 | 上海 | 陸家嘴 | 教學部 |
| 16 | cecilia | 女 | 18 | 1.51 | 上海 | 浦東 | 教職部 |
+----+---------+------+------+--------+--------+-----------+-----------+