视图
- 视图是一张虚拟表,它表示一张表的部分或多张表的综合的结构。
- 视图仅仅是表结构,没有表数据。视图的结构和数据建立在表的基础上。
作用
- 筛选数据,防止未经许可访问敏感数据
- 隐藏表结构
- 降低SQL语句的复杂度
一、演示数据
-- 学生表
create table student (
id int unsigned primary key,
name varchar(20) not null,
age tinyint unsigned not null
);
-- 成绩表
create table mark (
id int unsigned primary key,
chinese int,
math int,
english int
);
-- 学生表数据
insert into student values(1, '张三', 21);
insert into student values(2, '李四', 22);
insert into student values(3, '王二', 23);
-- 成绩表数据
insert into mark values(1, 80, 75, 85);
insert into mark values(2, 90, 65, 95);
insert into mark values(3, 40, null, null);
二、创建视图
# 创建视图,所有的学科都有参加考试的学生
create view vw_student as select * from student where id in(select id from mark where chinese is not null and math is not null and english is not null);
# 查看表格
show tables;
+----------------+
| Tables_in_test |
+----------------+
| mark |
| student |
| vw_student |
+----------------+
三、使用视图
视图是一张虚拟表,视图的用法和表的用法一样
select * from vw_student;
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | 张三 | 21 |
| 2 | 李四 | 22 |
+----+--------+-----+
四、查看视图的结构
desc 视图名;
五、查看创建视图的语法
show create view 视图名;
六、查看所有的视图
# 查看所有表也可以查看到视图
show tables;
七、修改视图
# 将vm_student视图修改为所有的学生信息
alter view vw_student as select * from student;
# 查看
select * from vw_student;
+----+--------+-----+
| id | name | age |
+----+--------+-----+
| 1 | 张三 | 21 |
| 2 | 李四 | 22 |
| 3 | 王二 | 23 |
+----+--------+-----+
八、删除视图
drop view 视图名;
九、视图的算法
- merge:合并算法,将视图的语句和外层的语句合并后在执行。
- temptable:临时表算法,将视图生成一个临时表,再执行外层语句。
- undefined:未定义,MySQL到底用merge还是用temptable由MySQL决定,这是一个默认的算法,一般视图都会选择merge算法,因为merge效率高。
create algorithm=temptable view 视图名
as
select 语句