当前位置: 首页 > news >正文

【重学 MySQL】七十三、灵活操控视图数据,轻松掌握视图删除技巧

【重学 MySQL】七十三、灵活操控视图数据,轻松掌握视图删除技巧

  • 更新视图数据:灵活操控,即时反映
    • 不可更新的视图
  • 删除视图:优雅清理,保持数据库整洁
  • 深度解析:为何更新和删除视图如此重要?
  • 总结
    • 视图优点
  • 视图不足
  • 结语

在这里插入图片描述
在 MySQL 的数据管理中,视图(View)作为一种虚拟表,为我们提供了极大的便利,它不仅能够简化复杂查询,还能增强数据的安全性和可读性。然而,视图并非一成不变,随着业务需求的变化,我们可能需要更新视图中的数据或删除不再需要的视图。今天,就让我们一同深入探索如何高效地更新视图数据以及优雅地删除视图。

更新视图数据:灵活操控,即时反映

更新视图数据看似复杂,实则不然。虽然视图本身并不存储数据,而是基于查询定义的虚拟表,但我们可以直接通过视图来更新其底层表中的数据。这一操作的关键在于,视图必须满足一定的条件,如视图必须基于简单的 SELECT 语句创建,不能包含聚合函数、子查询、DISTINCT 关键字等复杂元素。

-- 假设我们有一个名为 employee_view 的视图,它基于 employee 表创建
UPDATE employee_view
SET salary = salary * 1.1
WHERE department = 'Sales';

上述 SQL 语句将直接更新 employee 表中属于“Sales”部门的员工薪资,使其增长 10%。通过视图进行更新,不仅简化了操作,还确保了数据的一致性。

不可更新的视图

要使视图可更新,视图中的行和底层基本表中的行之间必须存在一对一的关系。另外当视图定义出现如下情况时,视图不支持更新操作:

  • 在定义视图的时候指定了“ALGORITHM = TEMPTABLE”,视图将不支持INSERT和DELETE操作;
  • 视图中不包含基表中所有被定义为非空又未指定默认值的列,视图将不支持INSERT操作;
  • 在定义视图的SELECT语句中使用了JOIN联合查询,视图将不支持INSERT和DELETE操作;
  • 在定义视图的SELECT语句后的字段列表中使用了数学表达式子查询,视图将不支持INSERT,也不支持UPDATE使用了数学表达式、子查询的字段值;
  • 在定义视图的SELECT语句后的字段列表中使用DISTINCT聚合函数GROUP BYHAVINGUNION等,视图将不支持INSERT、UPDATE、DELETE;
  • 在定义视图的SELECT语句中包含了子查询,而子查询中引用了FROM后面的表,视图将不支持INSERT、UPDATE、DELETE;
  • 视图定义基于一个不可更新视图
  • 常量视图。
    举例:
mysql> CREATE OR REPLACE VIEW emp_dept-> (ename,salary,birthday,tel,email,hiredate,dname)-> AS SELECT ename,salary,birthday,tel,email,hiredate,dname-> FROM t_employee INNER JOIN t_department-> ON t_employee.did = t_department.did ;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO emp_dept(ename,salary,birthday,tel,email,hiredate,dname)-> VALUES('张三',15000,'1995-01-08','18201587896',-> 'zs@atguigu.com','2022-02-14','新部门');#ERROR 1393 (HY000): Can not modify more than one base table through a join view 'atguigu_chapter9.emp_dept'

从上面的SQL执行结果可以看出,在定义视图的SELECT语句中使用了JOIN联合查询,视图将不支持更新操作。

虽然可以更新视图数据,但总的来说,视图作为虚拟表,主要用于方便查询,不建议更新视图的数据。**对视图数据的更改,都是通过对实际数据表里数据的操作来完成的。

删除视图:优雅清理,保持数据库整洁

当视图不再满足业务需求,或者我们需要重构数据库结构时,删除视图便成为了一个必要的步骤。在 MySQL 中,删除视图的操作非常简单,只需使用 DROP VIEW 语句即可。

-- 删除名为 employee_view 的视图
DROP VIEW employee_view;

值得注意的是,DROP VIEW 语句只会删除视图本身,而不会影响到视图所基于的底层表。这意味着,即使删除了视图,底层表中的数据仍然完好无损。

深度解析:为何更新和删除视图如此重要?

  1. 灵活性:通过视图,我们可以以更加灵活的方式操控数据,无需直接修改底层表结构或查询语句。
  2. 安全性:视图可以限制用户访问特定数据列或行,从而增强数据的安全性。
  3. 可维护性:随着业务需求的变化,我们可能需要更新或删除视图以保持数据库的整洁和高效。

总结

视图优点

1. 操作简单

将经常使用的查询操作定义为视图,可以使开发人员不需要关心视图对应的数据表的结构、表与表之间的关联关系,也不需要关心数据表之间的业务逻辑和查询条件,而只需要简单地操作视图即可,极大简化了开发人员对数据库的操作。

2. 减少数据冗余

视图跟实际数据表不一样,它存储的是查询语句。所以,在使用的时候,我们要通过定义视图的查询语句来获取结果集。而视图本身不存储数据,不占用数据存储的资源,减少了数据冗余。

3. 数据安全

MySQL将用户对数据的访问限制在某些数据的结果集上,而这些数据的结果集可以使用视图来实现。用户不必直接查询或操作数据表。这也可以理解为视图具有隔离性。视图相当于在用户和实际的数据表之间加了一层虚拟表。

在这里插入图片描述

同时,MySQL可以根据权限将用户对数据的访问限制在某些视图上,用户不需要查询数据表,可以直接通过视图获取数据表中的信息。这在一定程度上保障了数据表中数据的安全性。

4. 适应灵活多变的需求
当业务系统的需求发生变化后,如果需要改动数据表的结构,则工作量相对较大,可以使用视图来减少改动的工作量。这种方式在实际工作中使用得比较多。

5. 能够分解复杂的查询逻辑
数据库中如果存在复杂的查询逻辑,则可以将问题进行分解,创建多个视图获取数据,再将创建的多个视图结合起来,完成复杂的查询逻辑。

视图不足

如果我们在实际数据表的基础上创建了视图,那么,如果实际数据表的结构变更了,我们就需要及时对相关的视图进行相应的维护。特别是嵌套的视图(就是在视图的基础上创建视图),维护会变得比较复杂,可读性不好,容易变成系统的潜在隐患。因为创建视图的 SQL 查询可能会对字段重命名,也可能包含复杂的逻辑,这些都会增加维护的成本。

实际项目中,如果视图过多,会导致数据库维护成本的问题。

所以,在创建视图的时候,你要结合实际项目需求,综合考虑视图的优点和不足,这样才能正确使用视图,使系统整体达到最优。

结语

通过本文的学习,我们不仅掌握了如何更新视图数据和删除视图的基本操作,还深入理解了这些操作背后的原理和重要性。在 MySQL 的数据管理中,视图无疑是一个强大的工具,它能够帮助我们更加高效地处理数据,提升数据库的可维护性和安全性。让我们在未来的数据库管理中,更加灵活地运用视图,为业务的发展提供坚实的支持。


http://www.mrgr.cn/news/54892.html

相关文章:

  • 3.matplotlib基础及用法(全)
  • STM32软件模拟I2C的实现方式(一)
  • 通过OpenCV实现 Lucas-Kanade 算法
  • 信雅纳Chimera 100G网络损伤仪助力Parallel Wireless开展5G RAN无线前传网络的损伤模拟
  • Java比较两个Excel是否内容一致
  • 在数据库中,`SELECT`, `FROM`, `JOIN`, `ON`, 和 `WHERE`各自的作用
  • DFF对比
  • SpringBoot运维
  • FHQtreap新模板
  • 诊断知识:NRC78(Response Pending)的回复时刻
  • @RequestMapping(“/api/users“)详细解释一下这行代码
  • 【云从】八、HTTPS流程与建站
  • Redux (八) 路由React-router、嵌套路由、路由传参、路由懒加载
  • 【Android】浅析OkHttp(1)
  • MySQL-29.事务-四大特性
  • web3学习-区块链基础知识
  • 图文深入介绍oracle资源管理(续)
  • 10.20学习
  • Linux基本指令一眼看懂(简洁表示)
  • C语言实践中的补充知识 Ⅱ
  • 【AIGC视频生成】视频扩散模型(综述+最新进展)
  • Python第五节 迷宫王国的奇幻旅程
  • TypeScript中 interface接口 type关键字 enum枚举类型
  • Guava防击穿回源-异步防击穿
  • nginx的配置
  • 电子政务的类型