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

MySQL—视图详解

基本介绍

视图概念:视图是一种虚拟存在的数据表,这个虚拟的表并不在数据库中实际存在。

本质:将一条 SELECT 查询语句的结果封装到了一个虚拟表中,所以在创建视图的时候,工作重心要放在这条 SELECT 查询语句上。

作用:将一些比较复杂的查询语句的结果,封装到一个虚拟表中,再有相同查询需求时,直接查询该虚拟表。

优点:

  • 简单:使用视图的用户不需要关心表的结构、关联条件和筛选条件,因为虚拟表中已经是过滤好的结果集。
  • 安全:使用视图的用户只能访问查询的结果集,对表的权限管理并不能限制到某个行某个列。
  • 数据独立:一旦视图的结构确定,可以屏蔽表结构变化对用户的影响。源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

视图创建

创建视图

创建视图的语法如下:

CREATE [OR REPLACE] 
VIEW 视图名称 [(列名列表)] 
AS 查询语句
[WITH [CASCADED | LOCAL] CHECK OPTION];

1、OR REPLACE:如果视图已经存在,则替换它。

2、列名列表:可选,指定视图的列名,如果不指定,则使用查询语句中的列名。

3、查询语句:定义视图的 SELECT 查询语句。

4、WITH [CASCADED | LOCAL] CHECK OPTION:决定是否允许更新数据使记录不再满足视图的条件。

  • LOCAL:只要满足本视图的条件就可以更新。
  • CASCADED:必须满足所有针对该视图的所有视图的条件才可以更新,默认值。

例如,创建一个视图 employee_view,只显示 id、name 和 salary 列:

create table employees
(id     int primary key auto_increment,name   varchar(20)    not null,salary decimal(10, 2) not null
);
CREATE VIEW employee_view AS
SELECT id, name, salary
FROM employees;

视图查询

查询所有数据表和视图

SHOW TABLES;
SHOW TABLE STATUS [\G];

查询视图

SELECT * FROM 视图名称;

例如,查询 employee_view:

SELECT * FROM employee_view;

查询某个视图的创建语句

SHOW CREATE VIEW 视图名称;

例如,查询 employee_view 的创建语句:

SHOW CREATE VIEW employee_view;

视图修改

修改视图表中的数据

视图表数据修改会自动修改源表中的数据,因为更新的是视图中的基表中的数据。

UPDATE 视图名称 SET 列名 = 值 WHERE 条件;

例如,更新 employee_view 中 id 为 1 的员工的 salary:

UPDATE employee_view SET salary = 50000 WHERE id = 1;

修改视图的结构

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW 视图名称 [(列名列表)] 
AS 查询语句
[WITH [CASCADED | LOCAL] CHECK OPTION]

例如,将视图 employee_view 中的 id修改为 id_s:

ALTER VIEW employee_view AS
SELECT id AS id_s, name, salary
FROM employees;

视图删除

删除视图

DROP VIEW 视图名称;

例如,删除 employee_view:

DROP VIEW employee_view;

如果存在则删除

DROP VIEW IF EXISTS 视图名称;

例如,如果 employee_view 存在则删除:

DROP VIEW IF EXISTS employee_view;

总结

视图是一种非常有用的工具,可以帮助简化复杂的查询、提高数据安全性,并确保数据独立性。通过将复杂的查询封装在视图中,用户可以更方便地访问和操作数据,而不必关心底层表的结构和复杂性。视图的创建、查询、修改和删除都有相应的 SQL 语句,可以根据需要灵活使用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【结构型】树形结构的应用王者,组合模式
  • ubuntu安装无线网卡驱动(非虚拟机版)
  • 安卓13修改设置设备型号和设备名称分析与更改-android13设置设备型号和设备名称更改
  • 【计算机网络篇】物理层
  • 【Android】使用Room数据库解决本地持久化
  • 配置win10开电脑时显示可登录账号策略
  • ER论文阅读-Incomplete Multimodality-Diffused Emotion Recognition
  • MySQL 8 查看 SQL 语句的执行进度
  • C++之初识STL(概念)
  • GitLab 迁移后 Token 失效解决方法
  • java项目之城镇保障性住房管理系统(源码+文档)
  • vue使用PDF.JS踩的坑--部署到服务器上显示pdf.mjs viewer.mjs找不到资源
  • OpenAI GPT o1技术报告阅读(2)- 关于模型安全性的测试案例
  • MyBatis参数处理
  • Python从0到100(五十八):机器学习-随机森林及对复杂数据集分类
  • 时间复杂度分析经典问题——最大子序列和
  • 收藏网友的 源程序下载网
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • ES10 特性的完整指南
  • JavaScript的使用你知道几种?(上)
  • JavaScript设计模式系列一:工厂模式
  • spring boot 整合mybatis 无法输出sql的问题
  • v-if和v-for连用出现的问题
  • 构建二叉树进行数值数组的去重及优化
  • 设计模式 开闭原则
  • 设计模式走一遍---观察者模式
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 数据科学 第 3 章 11 字符串处理
  • ### RabbitMQ五种工作模式:
  • #DBA杂记1
  • #QT(串口助手-界面)
  • #Z0458. 树的中心2
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (Java企业 / 公司项目)点赞业务系统设计-批量查询点赞状态(二)
  • (附源码)springboot教学评价 毕业设计 641310
  • (汇总)os模块以及shutil模块对文件的操作
  • (免费领源码)python#django#mysql公交线路查询系统85021- 计算机毕业设计项目选题推荐
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转) Face-Resources
  • (转)linux 命令大全
  • (转)用.Net的File控件上传文件的解决方案
  • ******之网络***——物理***
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET CLR Hosting 简介
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET开源快速、强大、免费的电子表格组件
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限