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

【MySQL】视图详解

视图详解

    • 一、视图的概念
    • 二、视图的常用操作
      • 2.1创建视图
      • 2.2查询视图
      • 2.3修改视图
      • 2.4 删除视图
      • 2.5向视图中插入数据
    • 三、视图的检查选项
      • 3.1 cascaded(级联 )
      • 3.2 local(本地)
    • 四、视图的作用

一、视图的概念

视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的

通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上

二、视图的常用操作

2.1创建视图

语法:

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

使用示例:

 create view account_view as select * from account where id < 10;

结果:

在这里插入图片描述

2.2查询视图

查看创建视图语句:

SHOW CREATE VIEW 视图名称;

查看视图数据:

SELECT * FROM 视图名称 ...... ;

使用示例:

show create view account_view;

结果:

在这里插入图片描述

select * from account_view;

结果:

在这里插入图片描述

2.3修改视图

语法:

方法一:如果存在就替换掉

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

方法二:

update 视图名称 set 字段修改语句 条件

使用示例:

 update account_view set name = '小美' where id = 3;

结果:

在这里插入图片描述
注意:对视图进行操作的时候,也会影响关联的表

2.4 删除视图

语法:

DROP VIEW [IF EXISTS] 视图名称 [,视图名称] ...

结果:

在这里插入图片描述

注意:使用update语句,修改视图的时候,会修改我们原表的数据

2.5向视图中插入数据

如果视图中没有的字段,插入时使用默认值

先查看account表结构:

在这里插入图片描述

可以发现都不能为空,但blance有一个默认值,此时拿前两个字段创建视图:

create view view_accounta as select id, name from account;

在这里插入图片描述

向视图中插入元素:

insert into view_accounta values(4,'小明');

在这里插入图片描述

当表中的字段不能为空时,也没有设置使用默认值,那么将插入失败

查看表结构,并创建视图:

create view view_stu as select sn, name, chinese from stu;

在这里插入图片描述

查看视图,并插入元素:

在这里插入图片描述

可以发现,这时会插入失败。

总结概括:

  • 视图关联表中的全部字段,那么可以插入
  • 视图关联表中的部分字段,且另一部分字段可以空 或 不能为空但设置了默认值,则可以插入
  • 视图关联表中的部分字段,另一部分字段不能为空且未设置默认值,那么将不能插入

三、视图的检查选项

当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。 MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,mysql提供了两个选项: CASCADED 和 LOCAL ,默认值为 CASCADED

3.1 cascaded(级联 )

比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 cascaded,但是v1视图创建时未指定检查选项。 则在执行检查时,不仅会检查v2,还会级联检查v2的关联视图v1

在这里插入图片描述

3.2 local(本地)

比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 local ,但是v1视图创建时未指定检查选项。 则在执行检查时,知会检查v2,不会检查v2的关联视图v1

在这里插入图片描述

四、视图的作用

  1. 简单:视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件
  2. 安全:数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据
  3. 数据独立:视图可帮助用户屏蔽真实表结构变化带来的影响
http://www.lryc.cn/news/500221.html

相关文章:

  • 第一节:ORIN NX介绍与基于sdkmanager的镜像烧录(包含ubuntu文件系统/CUDA/OpenCV/cudnn/TensorRT)
  • 2024-12-04OpenCV视频处理基础
  • D89【python 接口自动化学习】- pytest基础用法
  • 七、docker registry
  • FlightGear+MATLAB+飞行手柄实现实时飞控视景系统
  • 深入 Java 基础 XML:高级特性与最佳实践
  • 【论文阅读】Fifty Years of the ISCA: A Data-Driven Retrospective
  • TVbox源贡献指南
  • qt数据类型定义(包含签名)
  • docker逃逸总结
  • MySql:表的操作
  • LVGL9 开关控件 (lv_switch) 使用指南
  • fastadmin 登录退出忽略中间提示页面
  • 游戏引擎学习第36天
  • 准确率99.9%的离线IP地址定位库 ip2region - python 示例
  • wordpress网站使用Linux宝塔面板和SQL命令行导入导出超过50M限制的数据库
  • 开发基础(3):开发应用沉浸式效果 组件安全区方案
  • Python中的数据可视化实战
  • 计算机毕设-基于springboot的甜品店管理系统的设计与实现(附源码+lw+ppt+开题报告)
  • SpringMVC纯注解快速开发
  • 【JAVA】Java高级:多数据源管理与Sharding:在Spring Boot应用中实现多数据源的管理
  • 汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全
  • 黑马点评项目测试总结
  • 【Selenium】基于 WebDriverWait 爬取带有懒加载的静态页面
  • 【docker】docker compose 和 docker swarm
  • Javaweb 前端 ajax
  • 【蓝桥杯每日一题】重新排序
  • 《深入浅出HTTPS》读书笔记(16):消息验证码算法分类
  • 如何使用Apache HttpClient来执行GET、POST、PUT和DELETE请求
  • 数据结构-希尔排序