【MYSQL】视图
- 创业
- 2025-09-05 23:21:02

【MYSQL】视图 一、视图的概念1.1 视图的概念1.2 为什么要用视图 二、创建视图2.1 创建单表查询视图2.2 创建多表联合视图2.3 基于视图创建视图 三、查询视图3.1 查看数据库的表对象、视图对象3.2 查看视图的结构3.3 查看视图的详细定义信息3.4 展示视图的详细内容 四、修改视图4.1 修改基表数据4. 2 修改视图数据 五、删除视图六、视图的总结6.1 优点6.2 缺点 一、视图的概念 1.1 视图的概念
在MySQL中,视图(View)是一种虚拟表,其内容由SQL查询定义。视图并不实际存储数据,而是基于一个或多个基础表(或视图)的查询结果动态生成数据。视图可以看作是一个保存了特定查询的“窗口”,通过这个窗口可以查看或操作数据,而无需直接操作底层的物理表。
1.2 为什么要用视图视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,公司发工资,我们通过查询就只能看到自己的工资,不能看到全部人的工资。
视图的应用场景有很多,这里只是列举一个,最后,总结出视图的优点。
二、创建视图语法:
CREATE [OR REPLACE] VIEW view_name AS SELECT column1, column2, ... FROM table_name WHERE condition;OR REPLACE(可选):如果视图已经存在,OR REPLACE选项会替换掉旧的视图定义。如果没有这个选项,尝试创建已存在的视图会报错。
事先创建好两个表student和student_score,方便接下来的演示。 student表: student_score表:
2.1 创建单表查询视图举例:
CREATE view student_name_sex as select name,sex from student;结果:
2.2 创建多表联合视图举例: 注意:
create view student_name_course_score_sex as select name,sex,course,score from student s, student_score sc where s.name=sc.name;当我们多表创建视图的时候会出现这个错误,这是因为两个表中包含相同的字段名,此时查询时未明确指定字段所属的表,就会导致该错误。 修改:
create view student_name_course_score_sex as select s.name,sex,course,score from student s, student_score sc where s.name=sc.name; 2.3 基于视图创建视图举例:
create view student_name_course_score as SELECT name,course,score from student_name_course_score_sex;结果:
三、查询视图 3.1 查看数据库的表对象、视图对象 SHOW TABLES; 3.2 查看视图的结构 DESC / DESCRIBE 视图名称; 3.3 查看视图的详细定义信息 SHOW CREATE VIEW 视图名称; 3.4 展示视图的详细内容 SELECT * FROM 视图名称; 四、修改视图 4.1 修改基表数据这里我们看到视图显示的数据:张三的java成绩是99,我们将张三Java成绩改为9分,看下视图的成绩会不会发生变化。
修改基表数据会影响视图的数据!!!
4. 2 修改视图数据这里我们已经将基表:张三的java成绩改为9分,接下来,我们将视图的张三Java成绩改为99,看能否对基表产生影响。 视图: 基表:
修改视图数据会对基表数据产生影响!!!
注意:
修改真实表会影响视图,修改视图同样也会影响真实表以下视图不可更新:
创建视图时使⽤聚合函数的视图创建视图时使⽤ DISTINCT创建视图时使⽤ GROUP BY 以及 HAVING ⼦句创建视图时使⽤ UNION 或 UNION ALL查询列表中使⽤⼦查询在FROM⼦句中引⽤不可更新视图 例子:值得注意的是:虽然可以更新视图数据,但总的来说,视图作为 虚拟表 ,主要用于 方便查询 ,不建议更新视图的数据。对视图数据的更改,都是通过对实际数据表里数据的操作来完成的。
五、删除视图语法:
DROP VIEW IF EXISTS 视图名称; drop view student_name_course_score_2;谨慎删除!!!
六、视图的总结 6.1 优点 简化复杂查询视图可以封装复杂的SQL查询逻辑,使得用户可以通过简单的SELECT语句访问数据,而无需每次都编写复杂的查询语句。 举例:通过视图可以隐藏多表连接、分组统计等复杂操作,使得查询更加直观。
提高数据安全性视图可以限制用户对某些数据的访问权限,用户只能通过视图访问数据,而无法直接访问底层表,从而实现数据的安全性和隔离。 举例:通过视图隐藏敏感字段(如薪资信息),只展示允许访问的数据。
逻辑独立性视图提供了一种逻辑上的抽象,使得应用程序与底层数据表的结构解耦。即使底层表的结构发生变化(如字段名更改、表结构调整等),只要视图的定义仍然有效,应用程序代码无需修改。 举例:如果底层表的字段名被修改,只需调整视图的定义,而无需修改所有依赖该表的应用程序代码。
重用SQL逻辑视图可以将常用的查询逻辑保存起来,避免重复编写相同的SQL语句,减少代码量并提高代码的可维护性。 举例:多个应用程序或模块可以共享同一个视图,而不必各自实现相同的查询逻辑。
动态数据展示视图是动态的,其内容会随着底层表数据的变化而实时更新。这意味着视图始终反映最新的数据状态,无需手动维护数据的一致性。 举例:基于视图的报表可以实时反映最新的业务数据。
简化多表查询视图可以将多个表的数据整合在一起,隐藏复杂的JOIN操作,使得查询更加直观和简单。 举例:通过视图将订单表和订单明细表整合,简化查询逻辑。
6.2 缺点如果我们在实际数据表的基础上创建了视图,那么,如果实际数据表的结构变更了,我们就需要及时对相关的视图进行相应的维护。 特别是嵌套的视图(就是在视图的基础上创建视图),维护会变得比较复杂, 可读性不好 ,容易变成系统的潜在隐患。因为创建视图的 SQL 查询可能会对字段重命名,也可能包含复杂的逻辑,这些都会增加维护的成本。
上一篇
js考核第五题