0%

MySQL视图

MySQL视图

视图的概念

视图是一种虚拟存在的表,由数据库中一个或多个表的字段构成,行和列的数据来自于定义的视图的查询中使用的表,并且是在使用视图中动态生成的,只保存sql逻辑,不保存数据

视图不能被索引,也不能有关联的触发器或默认值

应用场景

  • 多个地方使用同样的查询结果
  • 该查询结果使用的sql语句较为复杂

视图

创建视图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#语法结构
create view 视图名
as 查询语句

create view my_view as select s.name as student_name,c.name as class_name from student s join class c on s.classid = c.id;

#查看视图 此时视图里只有两个字段
desc my_view;
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| student_name | varchar(20) | NO | | NULL | |
| class_name | varchar(20) | NO | | NULL | |
+--------------+-------------+------+-----+---------+-------+

使用视图查询

1
2
#注意:查询时只可以使用视图中的字段进行查询
select * from my_view where student_name = '张三';

修改视图

有两种方式修改视图

方式一:有则修改,没有则创建

1
2
create or replace view 视图名
as 查询语句

方式二:

1
alter view 视图名 as 查询语句

删除视图

1
drop view 视图名,视图名,...

视图中数据更新

在使用简单地查询语句作为视图时,可以对视图进行增删改操作,而且对视图的操作也会同样使数据表完成相应的变化

但是包含以下特点的视图不允许更新

  • 分组函数、distinct、group by、having、union、union all
  • 常量视图
  • select中包含子查询
  • join语句(可以update但是不可以insert和delete)
  • 数据来自于一个不可更新的视图
  • Where 子句的子查询引用了from子句中的表

优缺点

优点

  • 对数据库的访问,视图可以有选择性的选取数据库的一部分
  • 用户通过简单地查询可以从复杂查询中得到结果
  • 维护数据的独立性,可以从多个表检索数据
  • 对于相同的数据可以产生不同的视图

缺点

  • 查询视图时,必须把视图的查询转化为对基本表的查询
  • 如果这个视图是由一个复杂的多表查询所定义的,那么将无法更改数据

欢迎关注我的其它发布渠道