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

MySQL-视图

目录

介绍

基本操作语法

创建视图

查看视图创建语句

查看视图数据

修改视图

删除视图

检查选项

with cascaded check option

with local check option 

更新及作用

更新的条件

更新的作用

简单

安全

数据独立


介绍

视图是一种虚拟的表,在数据库中并不真实存在。更简单地说,就是视图并不储存数据,只是纪录了数据的逻辑。

基本操作语法

创建视图

create or replace view name_gen as select user_name,user_gender from users where user_id <=10;

查看视图创建语句

show create view name_gen;

查看视图数据

select *from name_gen;

修改视图

create or replace view name_gen as select user_name,user_gender,uesr_num from users where user_id <=10;
alter view name_gen as select id,name from user where id<=10;

可以添加新的字段,或删除字段。

删除视图

drop view if exist name_gen;

不难发现,视图是一种特殊的表,所以可以想使用表一样来操作视图。

检查选项

我们开始说过,视图当中是不存数据的,试图展示的只是数据间的逻辑关系。

那么大家思考一下,如果我想对表一样,针对视图进行插入操作,还会不会有数据的变化呢?

答案是会变化的,但是变化的本质不是视图,而是视图表示的那张真实存在的数据表,我们将其称为基表

简单来说,针对视图进行的插入操作,最后会直接作用于基表,此时不管进行表的查询还是视图的查询都会发现数据的修改

那么对使视图的插入操作会影响到数据表,就会带来一系列的问题,比如:

我创建了一个有十条数据的视图(字段为id和name),,假设基表有5条数据:

create or replace view id_name as select user_id,user_name from users where user_id <=10;

然后针对视图进行插入数据的操作:

insert into name_gen values(8,"小昭");

此时我们知道,基表已经多了一条数据,而我们再进行视图或者基表的查询时,能够看见数据的变化。

那么再次插入一条数据:

insert into name_gen values(12,"光头强");

我们先查看基表,数据变确实变化了。但是我们进行视图视图查询时,发现视图并没有变化!!!

我们回顾一下视图的创建语句,我们使用了约束函数where,约束了id的范围,这就一定程度破坏数据的一致性。

而解决这个问题可以在视图创建时加上检查选项:

create or replace view id_name as select user_id,user_name from users where user_id <=10
with cascaded check option;
--with local check option

介绍

在使用 with local check option 时,MySQL会检查视图的每一个正在更新的行,并确保它符合视图的创建条件。MySQL允许基于一个视图创建另一个视图,为了规定检查的范围,mysql提供了两个选项:

  • with cascaded check option

 cascaded就是,当某一个视图是建立在另一个视图上创建的,就会对该视图以及所关联的视图进行检查,必须要都满足,才能进行合法操作。

这里要非常注意的是,虽然即使在创建视图时使用了约束函数where,但是如果没有指定检查选项时,在更新视图时不会去判断where中的条件。 

  • with local check option 

与cascaded的区别在于,local只会为当前语句创建检查选项,并不会为关联的表创建检查选项。 

更新及作用

更新的条件

视图中的行必须与基础表中的行一一对应关系。

视图包含下面任何一项则不可更新:

  1. 聚合函数
  2. DISTINCT
  3. group by
  4. having
  5. UNION、UNION ALL

更新的作用

  • 简单

视图可以简化数据的操作,如果一项查询被经常使用,就可以将其写成视图,就不用每次查询的时候都去指定一系列条件。

  • 安全

虽然数据库可以进行授权操作,但是并不能具体到数据表的行和列上。而通过视图,用户只能修改视图中的可见数据。

  • 数据独立

能够消除底层基表变化带来的影响(用户不需要关心视图背后的实际数据来源)        

相关文章:

  • 子数组 之 logTrick算法,求解或,与,LCM,GCD
  • 详细讲解c++中线程类thread的实现,stl源码讲解之thread
  • HarmonyOs-ArkUI List组件
  • 【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究
  • 【NUUO 摄像头】(弱口令登录漏洞)
  • 苏宁开放平台关键字搜索接口接入教程‌
  • 第三天 函数定义与参数传递 - 模块与包管理
  • 红宝书第十四讲:详解JavaScript集合类型:Map、Set、WeakMap
  • mysql高级,mysql体系结构,mysql引擎,存储过程,索引,锁
  • Linux-数据结构-哈夫曼树-哈希表-内核链表
  • SQL 视图
  • linux,防火墙,firewall,常用命令
  • FastAPI系列02:FastAPI程序结构与生命周期
  • Web Workers优化 Web 网站的性能
  • Unity2D 五子棋 + Photon联网双人对战
  • Postman 如何发送 JSON 格式的 API 请求?
  • 2025-03-24 学习记录--C/C++-PTA 习题7-4 求矩阵各行元素之和
  • 关于Qt的各类问题
  • MOSN(Modular Open Smart Network)-08-MOSN 扩展机制解析
  • Three.js 快速入门教程【十八】射线拾取模型——鼠标点击屏幕选中模型或物体
  • CSR周刊:李宁打造世界地球日特别活动,珀莱雅发布2024年度可持续发展报告
  • 持续更新丨伊朗官员:港口爆炸事件已致5人死亡
  • 文化体验+商业消费+服务创新,上海搭建入境旅游新模式
  • 伤者升至80人,伊朗港口爆炸源头或为“危险品和化学品仓库”
  • 云南舞蹈大家跳暨2025年牟定“三月会”昨天开幕
  • 全国首例!上市公司董监高未履行公开增持承诺,投资者起诉获赔