什么是视图?

视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。

通过视图,可以展现基表(用来创建视图的表)的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成,基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。

视图的作用:

1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

视图的简单使用:

1、创建表并添加数据:

--创建表1:
mysql> create table tab_01(id int(11) not null auto_increment,Code varchar(10) null,name char(16) not null,primary key(id));
Query OK, 0 rows affected (0.06 sec)

--添加数据--

mysql> insert into tab_01(Code,Name) values('001','张三');
mysql> insert into tab_01(Code,Name) values('002','李四');


mysql> select * from tab_01;
+----+------+--------+
| id | Code | name   |
+----+------+--------+
|  1 | 001  | 张三   |
|  2 | 002  | 李四   |
+----+------+--------+
2 rows in set (0.00 sec)

mysql> 


--创建表2;
mysql> create table tab_02(id int(11) not null auto_increment,Code varchar(10) null,name char(16) not null,primary key(id));
Query OK, 0 rows affected (0.08 sec)

--添加数据--
mysql> insert into tab_02(Code,Name) values('001','王五');
mysql> insert into tab_02(Code,Name) values('002','赵六');

--查询数据--
mysql> select * from tab_02;
+----+------+--------+
| id | Code | name   |
+----+------+--------+
|  1 | 001  | 王五   |
|  2 | 002  | 赵六   |
+----+------+--------+
2 rows in set (0.00 sec)

2、创建视图

create view v_eds AS SELECT Code, Name FROM tab_01;

3、查询视图:

mysql> select * from v_eds;
+------+--------+
| Code | Name   |
+------+--------+
| 001  | 张三   |
| 002  | 李四   |
+------+--------+
2 rows in set (0.00 sec)

对于视图的查询也可以加上过滤条件:

mysql> SELECT * FROM v_eds WHERE Code = 001;
+------+--------+
| Code | Name   |
+------+--------+
| 001  | 张三   |
+------+--------+
1 row in set (0.01 sec)

查看当前库下所有的视图;

mysql> show full tables where table_type like 'VIEW';
+-------------------+------------+
| Tables_in_db_name | Table_type |
+-------------------+------------+
| View_Eds          | VIEW       |
| v_eds             | VIEW       |
+-------------------+------------+
2 rows in set (0.00 sec)

修改视图:

mysql> alter view v_eds as SELECT Code, Name FROM tab_01 where Code=001;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from v_eds;
+------+--------+
| Code | Name   |
+------+--------+
| 001  | 张三   |
+------+--------+
1 row in set (0.00 sec)

删除视图:

mysql> drop view v_Eds;

 

总结:

使用视图,需要把它看着为一张表,建立步骤和建立一张实体表步骤相同,
视图查出来的数据只能进行查看,不能增删改。
隐藏了复杂的sql语句,只显示最简单的查询操作