MySQL【视图】

发布时间:2026/7/1 6:57:49

MySQL【视图】 在数据库学习中我们经常会遇到一个概念视图。其实你可以简单地把视图理解为数据库里的“虚拟表”。其内容由查询定义 同真实的表一样 视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表基表的数据变化也会影响到视图。一、概念解析想象一下你有一张巨大的Excel表格真实的数据表里面存着几百列数据。但是你平时工作只需要看其中的5列或者需要把两张表的信息拼在一起看。视图就是帮你解决这个问题的。它本质上是一个“存储起来的查询语句”。当你查询视图时数据库会在后台自动执行那个查询语句然后把结果展示给你。核心特点虚拟表视图不直接存储数据它只是保存了一条SQL规则。动态性只要底层的真实数据表变了你查询视图时结果也会自动跟着变。双向影响视图的数据变化会影响基表原始表基表的数据变化也会影响视图。二、基本使用2.1 创建视图CREATE VIEWcreate view 视图名 as select查询语句;2.2实战案例-- 创建一个视图用来展示员工姓名和他所在的部门名称 CREATE VIEW myview AS SELECT ename, dname FROM EMP, DEPT WHERE EMP.deptno DEPT.deptno;CREATE VIEW v_ename_dname AS这是创建视图的命令。v_ename_dname是我们给视图起的名字。AS后面就是我们定义的规则。SELECT ename, dname我们只关心员工的姓名和部门名称所以只选这两列。FROM EMP, DEPT数据来自EMP员工表和DEPT部门表两张表。WHERE EMP.deptno DEPT.deptno这是连接条件。因为两张表都有部门编号通过这个条件我们才能把“张三”正确地关联到“销售部”而不是“技术部”。创建视图 创建表修改视图对基表有影响修改了基表对视图有影响使用视图和使用普通表一模一样都是用SELECT。-- 查询我们刚刚创建的视图 SELECT * FROM myview; -- 也可以在视图中使用排序 SELECT * FROM myview ORDER BY dname;删除视图drop view 视图名删除视图不会影响底层的EMP表和DEPT表的数据它只是删除了这个“虚拟的规则”。三、视图的规则和限制规则/限制详细解释1. 唯一命名视图在数据库中的名字必须是唯一的不能和已有的表名或者其他视图名重复。2. 性能影响创建视图本身没有限制但如果你的视图是基于一个非常复杂的多表查询比如连接10张表那么查询这个视图也会很慢。因为每次查询视图都要执行这个复杂的查询。3. 索引限制视图不能添加索引也不能有关联的触发器或默认值。想优化性能必须去优化创建视图的那个SELECT语句。4. 安全性视图可以隐藏敏感数据。比如你可以创建一个视图只显示员工的基本信息而不显示工资列然后把视图的权限给HR专员而不是给整个表的权限。5. ORDER BY 覆盖如果在定义视图时使用了ORDER BY在查询视图时又使用了ORDER BY那么查询时的ORDER BY会覆盖掉视图定义中的。建议 不要在定义视图时使用ORDER BY而应该在查询视图时按需排序。6. 混合使用视图可以和表一起使用。你可以写一条SQLJOIN一张表和另一个视图。

相关新闻