MySQL:视图
1.简介
- 视图是一张虚拟表,是一张或多张表数据的集合。
- 视频只有表结构没有表数据,数据在下层的表上。
作用
- 降低SQL语句的复杂度
- 筛选数据,防止未经许可访问敏感数据(对表的权限管理不能精确到列)
2.准备
-- 学生表
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),
(2, '李四', 22),
(3, '王二', 23);
-- 成绩表数据
insert into mark
values (1, 80, 75, 85),
(2, 90, 65, 95),
(3, 40, null, null);
3.创建视图
# 过滤出没有缺考学生信息
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);```
## 4.使用视图
> 视图是一张虚拟表,视图的用法和表的用法一样
```sql
select * from vw_student;
5.查看视图的结构
desc {view_name};
6.查看创建视图的语法
show create view {view_name};
7.查看所有的视图
# 查看所有表也可以查看到视图
show tables;
8.修改视图
# 将vm_student视图修改为所有的学生信息
alter view vw_student as select * from student;
9.删除视图
drop view {view_name};
10.视图的算法
- merge:合并算法,将视图的语句和外层的语句合并后在执行,注意:行必须和基表中的行具有一对一的关系。
- temptable:临时表算法,将视图生成一个临时表,再执行外层语句。
- undefined:未定义,MySQL到底用merge还是用temptable由MySQL决定,这是一个默认的算法,一般视图都会选择merge算法,因为merge效率高。
create algorithm=temptable view 视图名
as
select 语句
11.参考
- 《深入浅出MySQL第2版》唐汉明、翟振兴、关宝军、王洪权、黄潇著