什么是视图?
视图(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语句,只显示最简单的查询操作