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 将被覆盖;
  • 视图可以和表一起使用。
相关推荐
笃行3507 小时前
【金仓数据库产品体验官】订单增量同步实战:MERGE、OUTPUT 与 IDENTITY 的兼容验证
数据库
星恒随风10 小时前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
无奈笑天下11 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
xiaoye-duck12 小时前
《C++ 项目:手写大模型接入 SDK》会话模块整合:内存 SessionManager 与 DataManager 持久化联动
开发语言·数据库·c++·语言模型
AllData公司负责人13 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析
隔窗听雨眠13 小时前
MySQL进程卡死的定位思路与恢复实践
mysql·故障排查·数据库运维
2601_9679873714 小时前
Sqlite参考手册
数据库·python·sqlite·api·教程
隔窗听雨眠14 小时前
Oracle日志体系分层结构与故障定位路径
数据库·oracle·故障排查
为思念酝酿的痛14 小时前
C语言操作MySQL
数据库·mysql
ShineWinsu15 小时前
对于Qt:QTabWidget常见属性的解析
开发语言·数据库·c++·qt·浏览器·qtabwidget·标签页