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 将被覆盖;
  • 视图可以和表一起使用。
相关推荐
写后端的胖头鱼5 分钟前
【高频面试题】SQL 查询慢怎么排查
数据库·sql·mysql·oracle·慢查询·高频面试题
扬大平仔12 分钟前
# 小深:用 AgentScope Java 2.0 Harness 做私人助手(上)mysql
java·开发语言·mysql
蓝速科技13 分钟前
口岸政务窗口双屏翻译机落地应用指南
运维·数据结构·数据库·人工智能·科技·政务
风哥2号16 分钟前
数据库教程FGMT20‑Oracle容灾体系架构与数据库升级迁移方案
数据库·oracle·架构
wudongfang66637 分钟前
mysql全量同步数据改增量
数据库·mysql
志栋智能1 小时前
超自动化安全的变更与配置安全管理
数据库·安全·自动化
toooooop81 小时前
thinkphp查询数据表最后的自增id
前端·javascript·数据库
风哥2号1 小时前
数据库教程FGMT19‑Oracle多租户容器架构与新特性总结
数据库·oracle·架构
garmin Chen1 小时前
MySQL精简面试题
数据库·后端·mysql·面试
anxiao_m1 小时前
局域网文件传输工具有哪些?4款主流工具实测对比测评
大数据·网络·数据库