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

存储对象之【视图】

一 . 什么是视图

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

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

 

二 . 基本语法 

  • 1.创建:create [or replace] view 视图名称[(列名列表)] as select 语句 [with [ cascaded | local ] check option
  • 2.查看创建视图语句:show create view 视图名称;
  • 3.查看视图的数据: select * from 视图名称......;
  • 4.修改视图:

方式一: create [or replace] view 视图名称[(列名列表)] as select with [cascaded | local ] check option ] 

方式二: alter view 视图名称[(列名列表)] as select 语句 [with [ cascaded | local | check option]

  • 5.删除:drop view [if exists] 视图名称 [视图名称] ...

注:

1. 视图定义后,对视图的查询操作如同对基本表的查询操作一样 ,但视图的建立简化了查询操作

-- 创建视图
create or replace view stu_v_1 as select id,name from student where id <= 10;
-- 查询视图
show create view stu_v_1;
select * from stu_v_1;
select * from stu_v_1 where id < 3;
-- 修改视图
create or replace view stu_v_1 as select id,name,no from student where id <= 10;
alter view stu_v_1 as select id,name from student where id <= 10;
-- 删除视图
drop view if exists stu_v_1;

 

6.更新视图

由于视图是一张虚表,所以对视图的更新,最终转换成对基本表的更新。

1)其语法格式如同对基本表的更新操作一样。

2)添加--INSERT,修改--UPDATE,删除--DELETE

3)视图的应用场景:利于数据保密,简化查询操作,保证数据的逻辑独立性

三 . 视图检查选项

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

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

 

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

 

 

四 . 视图更新

要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新
  •   聚合函数或窗口函数(SUM()MIN()MAX()COUNT()等)
  • DISTINCT
  • GROUP BY
  • HAVING
  • UNION 或者 UNION ALL

五 . 视图作用 

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

http://www.kler.cn/a/464924.html

相关文章:

  • [网络安全] DVWA之Content Security Policy (CSP) Bypass 攻击姿势及解题详析合集
  • Golang 如何打包到Docker运行
  • 小程序组件 —— 25 组件案例 - 商品导航区域
  • df.replace({‘b‘: r‘\s*\.\s*‘}, {‘b‘: np.nan}, regex=True)
  • (六)vForm 动态表单(数据量大,下拉选卡顿问题)
  • C# 服务调用RFC函数获取物料信息,并输出生成Excel文件
  • 【商业化】【微软商店】微软打包时报找不到img/logo.ico
  • java class类对象 加载时机
  • 深度学习blog- 数学基础(全是数学)
  • 【每日学点鸿蒙知识】组件对象做参数、2D在子线程中使用、Tabs组件联动、Web组件获取焦点、Text加载藏文
  • EasyPlayer.js RTSP流重连问题的说明
  • Unity2D无限地图的实现(简单好抄)
  • 【Docker】:Docker命令及平台基本使用方法
  • C++ 空类大小
  • Tailwind CSS 实战:动画效果设计与实现
  • el-table 实现纵向多级表头
  • canvas+fabric实现时间刻度尺+长方形数据展示
  • QT--------网络
  • 电脑中缺失的nvrtc64_90.dll文件如何修复?
  • uni-ui样式修改