第十一章 视图
视图基本概念
视图的含义
- 视图是从一个或多个表导出的虚拟的表,其内容由查询定义
- 使用视图提高数据库的系统安全
- 视图与真实的数据表一样具有行和列组成
- 视图可以理解为是一个虚拟的表
- 视图不实现数据存储
视图的作用
- 简化了操作,把经常使用的数据定义为视图
- 安全性,用户只能查询和修改能看到的数据
- 逻辑上的独立性,屏蔽了真实表的结构带来的影响
视图的缺点
- 性能差
- 修改限制
- 单表视图一般用于查询和修改,会改变基本表的数据
- 多表视图一般用于查询,不会改变基本表的数据
视图指令
-
创建视图:
[CREATE|REPLACE] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name [(column_list)] AS SELECT_statement [WITH[CASCASDED|LOCAL] CHECK OPTION]
- CREATE|REPLACE:创建新的或替换已存在的
- ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}:视图选择的算法
- UNDEFINED:不定义,数据库自动选择算法
- MERGE:混合,合并视图的语句与定义
- TEMPTABLE:将视图结果存入临时表中,用临时表来执行语句
- column_list:属性列
- SELECT_statement:SELECT语句
- CASCASDED|LOCAL:可选参数
- CASCASDED:默认值,更新视图时要满足所有相关视图和表的条件
- LOCAL:更新视图时满足该视图本身定义即可
-
查看视图:
SELECT * FORM 视图名
-
删除视图:
DROP VIEW 视图名
单表视图应用
例如,create view view1 as select id,name,nian from test1;
表示创建一个名为view1的视图,从test1数据表中选中id,name和nian三列来建立view1视图
多表视图应用
需求:在student和stu_info表上,创建stu_class视图,查询出stu_id、姓名和班级
- 创建stu_info表,并向其中插入数据
mysql> create table stu_info(s_id int(3),class varchar(50),addr varchar(100));
mysql> insert into stu_info values (1,'class1','fuzhou'),(2,'class2','xiamen'),(3,'class1','sichuan');
2.创建student表,并向其中插入数据
mysql> create table student (s_id int(3),name varchar(30));
mysql> insert into student(s_id,name) values (1,'xi'),(2,'mei'),(3,'lan');
3.创建stu_class视图
创建的视图包含id、name和class字段
其中,id字段对应student表中的s_id字段,name字段对应student表中的name字段,class字段对应stu_info表中的class字段
mysql> create view stu_class(id,name,class) as select student.s_id,student.name,stu_info.class from student,stu_info where student.s_id=stu_info.s_id;
4.查看视图
mysql> select * from stu_class;
+------+------+--------+
| id | name | class |
+------+------+--------+
| 1 | xi | class1 |
| 2 | mei | class2 |
| 3 | lan | class1 |
+------+------+--------+
3 rows in set (0.00 sec)