MySQL视图特性

目录

视图概念

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

基本使用

下面用员工表和部门表作为测试表,员工表中的ename代表的是员工的姓名,deptno代表的是员工所在部门的部门号。

部门表中的dname代表的是部门名,deptno代表的是部门的部门号。

创建视图

基本语法:

cpp 复制代码
create view 视图名 as select语句;

创建视图时会先执行select语句,然后用查询得到的结果来创建视图。

当我们要查询每个员工及其对应的部门名称时,需要使用员工表和部门表进行多表查询,并筛选出员工的部门号等于部门的部门号的记录。

如果该查询结果会被频繁用到,那我们就可以给上述查询结果创建视图。

并且在数据库对应的目录下,会增加一个对应的xxx.frm文件,但并没有与之对应的xxx.ibd文件,这也证明了视图和基表使用的是同一份数据。

我们就可以直接通过查询视图,来查看每个员工及其对应的部门名称了。

修改视图会影响基表

通过员工表和部门表,来查看员工名,部门名和部门编号并且按部门名升序排列。

然后将员工'CLARK'的姓名改为'TEST',再去员工表中查看,会发现数据已经被修改了,我们再查询'CLARK'的信息就查不到了。

修改基表会影响视图

首先我们查看 'JAMES' 所在的部门号。

然后我们在基表中将 'JAMES' 的部门设置为10,修改完成以后,我们查看视图中 'JAMES' 的部门名称,会发现发生了变化;

删除视图

基本语法:

cpp 复制代码
drop view 视图名

比如我们要删除刚刚创建的视图。

并且该视图在数据库目录下对应的xxx.frm文件也会被删除。

视图规则和限制

  • 与表一样,必须唯一命名(不能出现同名视图或表名);
  • 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响;
  • 视图不能添加索引,也不能有关联的触发器或者默认值;
  • 视图可以提高安全性,必须具有足够的访问权限;
  • order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图中的 order by 将被覆盖;
  • 视图可以和表一起使用。
相关推荐
霖霖总总1 分钟前
[小技巧29]Batched Key Access:MySQL JOIN 性能优化的关键技术
数据库·mysql·性能优化
中环留念20 分钟前
MySQL 索引全解析:索引类型、聚簇索引、回表与性能优化
sql·mysql·索引·图解
Gobysec27 分钟前
Goby 漏洞安全通告|MindsDB /api/sql/query 未授权访问漏洞(CVE-2025-68472)
数据库·sql·安全
m0_7482459228 分钟前
SQLite 数据类型概述
java·数据库·sqlite
五阿哥永琪30 分钟前
MySQL 回表查询 性能代价?如何避免?
数据库·mysql
DBA小马哥32 分钟前
文档型数据库MongoDB迁移替换至金仓数据库上线流程周期全解析
数据库·mongodb·文档型数据库
冰暮流星40 分钟前
sql语言之where语句
java·数据库·sql
橘子1343 分钟前
MySQL基础(一)
数据库·mysql·php
難釋懷1 小时前
安装Redis
数据库·redis·缓存
jiayong231 小时前
Word协作与审阅实用手册
服务器·数据库·word