一、什么是视图
- 视图是从一个或多个表中导出来的表,是一种虚拟存在的表。
- 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据。
- 这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据。
- 数据库中只存放了视图的定义,而没有存放视图中的数据,这些数据存放在原来的表中。
- 使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。
- 视图中的数据依赖于原来表中的数据,一旦表中数据发生改变,显示在视图中的数据也会发生改变。
二、视图的作用
- 使操作简单化,可以对经常使用的查询定义一个视图,使用户不必为同样的查询操作指定条件
- 增加数据的安全性,通过视图,用户只能查询和修改指定的数据。
- 提高表的逻辑独立性,视图可以屏蔽原有表结构变化带来的影响。
三、创建视图的格式
CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 视图名 [(属性清单)]
AS SELECT 语句
[WITH [CASCADED|LOCAL] CHECK OPTION];
1、ALGORITHM:表示视图选择的算法(可选参数)
UNDEFINED:MySQL将自动选择所要使用的算法
MERGE:将视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分
TEMPTABLE:将视图的结果存入临时表,然后使用临时表执行语句
视图名表示要创建的视图的名称
2、属性清单表示视图中的列名,默认与SELECT查询结果中的列名相同(可选参数)
3、WITH CHECK OPTION表示更新视图时要保证在该试图的权限范围之内(可选参数)
CASCADED:更新视图时要满足所有相关视图和表的条件
LOCAL:更新视图时,要满足该视图本身定义的条件即可
四、示例
mysql> CREATE VIEW v1
-> AS
-> SELECT * FROM employee;
Query OK, 0 rows affected (0.03 sec)
mysql> SELECT * FROM v1;
+----+-----------+------+---------+--------+-------+------+
| id | username | age | salary | sex | depId | pId |
+----+-----------+------+---------+--------+-------+------+
| 1 | 张三 | 21 | 5432.12 | 男 | 1 | 1 |
| 2 | 李四 | 32 | 6432.00 | 男 | 2 | 2 |
| 3 | 王五 | 26 | 5932.92 | 女 | 3 | 3 |
| 4 | 赵六 | 32 | 6232.14 | 男 | 4 | 4 |
| 5 | Mr Adword | 55 | 9432.99 | 男 | 4 | 5 |
| 6 | 田七 | 19 | 4932.92 | 保密 | 1 | 3 |
| 7 | 孙八 | 62 | 9932.14 | 男 | 2 | 4 |
| 8 | Mr lili | 45 | 9132.99 | 女 | 1 | 5 |
+----+-----------+------+---------+--------+-------+------+
mysql> CREATE VIEW v2
-> (username,age)
-> AS
-> SELECT username,age FROM employee;
Query OK, 0 rows affected (0.02 sec)
mysql> SELECT * FROM v2;
+-----------+------+
| username | age |
+-----------+------+
| 张三 | 21 |
| 李四 | 32 |
| 王五 | 26 |
| 赵六 | 32 |
| Mr Adword | 55 |
| 田七 | 19 |
| 孙八 | 62 |
| Mr lili | 45 |
+-----------+------+
— 使用内连接查询的视图
mysql> CREATE VIEW v3
-> (id,name,depName)
-> AS
-> SELECT e.id,e.username,d.depName FROM employee AS e JOIN department AS d ON d.id=e.depId;
Query OK, 0 rows affected (0.02 sec)
mysql> SELECT * FROM v3;
+----+-----------+-----------+
| id | name | depName |
+----+-----------+-----------+
| 1 | 张三 | 开发部 |
| 2 | 李四 | 视频部 |
| 3 | 王五 | 教学部 |
| 4 | 赵六 | 运营部 |
| 5 | Mr Adword | 运营部 |
| 6 | 田七 | 开发部 |
| 7 | 孙八 | 视频部 |
| 8 | Mr lili | 开发部 |
+----+-----------+-----------+