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

MySQL:12_视图

视图

  • 跟事务里讲的视图没有任何关系

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。

一.基本使用

  • 创建视图
create view 视图名 as select语句;
  • 案例
create view v_ename_dname as select ename, dname
from EMP, DEPT where EMP.deptno=DEPT.deptno;

image-20250525125042382

  • 修改了视图,对基表数据有影响
select emp.ename,dept.dname,dept.deptno from emp,dept where
emp.deptno=dept.deptno order by dname;
update v_ename_dname set ename='TEST' where ename='CLARK';
select * from EMP where ename='CLARK';
select * from EMP where ename='TEST';
  • 修改了基表,对视图有影响

image-20250525125124029

  • 删除视图
drop view 视图名;

二.视图规则和限制

视图建议以查为主

  • 与表一样,必须唯一命名(不能出现同名视图或表名)
  • 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
  • 视图不能添加索引,也不能有关联的触发器或者默认值
  • 视图可以提高安全性,必须具有足够的访问权限
  • order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图中的 order by 将被覆盖(创建视图时select语句里面的order by会被视图查询时使用的order by覆盖)
  • 视图可以和表一起使用

三.实战OJ

牛客:针对actor表创建视图actor_name_view

四.总结

(一).介绍

视图是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的
通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图时,主要的工作就落在创建这条SQL查询语句上

(二).基本语法

1. 创建:
create [or replace] view 视图名称[(视图列表)] AS select语句[ with [ cascaded | local ] check option] 
# with check option默认是local的

不写WITH [CASCADED | LOCAL] CHECK OPTION 这一部分,那么默认不启用任何 CHECK OPTION 约束。

例子:

create view vip_customers as select * from customers where acct_bal > 10000;
#可以通过这个视图执行 insert 或 update,哪怕插入的数据不满足 acct_bal > 10000,数据库也不会报错,它会照样写入到底层表中。
create view china_customers as select * from customers where nation = 'china';create view vip_china_customers as 
select * from china_customers where acct_bal > 10000 with local check option;
#local check option表示:只检查本视图的条件(acct_bal > 10000)插入或更新时,不会检查上一层china_customers的nation='china'条件create view vip_china_customers_strict as
select * from china_customers where acct_bal > 10000 with cascaded check option;
#cascaded check option表示:检查当前视图和所有上层视图的条件,插入或更新的数据必须同时满足acct_bal > 10000和nation='china'
  • 对比
写法行为
不写 WITH CHECK OPTION视图不限制通过它插入或更新的数据是否满足视图定义条件
WITH LOCAL CHECK OPTION仅限制当前视图定义中 WHERE 条件满足即可
WITH CASCADED CHECK OPTION限制所有层级(自身及其依赖视图)都满足
  • 总结

如果不写 WITH CHECK OPTION,那就什么检查都没有;允许你通过视图插入/修改任何数据,即使这些数据插入后不会出现在视图里。

2. 查询:

查看创建视图语句:

show create view 视图名称;

查看视图数据:

select * from 视图名称……;
3. 修改:
  • 方法一:
create [or replace] view 视图名称[(视图列表)] as select语句[ with [ cascaded | local ] check option]
# or replace视图如果存在就替换
  • 方法二:
alter view 视图名称[(视图列表)] as select语句[with [cascaded | local ] check option ]
4. 删除:
drop view [if exists] 视图名称 [,视图名称]

(三).视图-检查选项

1. cascaded

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

(2).cascaded:对于关联的视图条件也会检查

2. local

local有则检查,没有则不对条件进行检查

(四).更新

视图的更新:视图中的行与基础表中的行之间必须存在一对一的关系,如果包括以下任何一项则不可更新:

  • (1)聚合函数或者窗口函数(SUM() , MIN() , MAX() , AVG() COUNT() )

  • (2)distinct

  • (3)group by

  • (4)having

  • (5)union union all

(五).作用

  1. 简单:简化用户对数据的理解,也能简化操作。

  2. 安全:数据库可以授权,但不能授权到特定的行和列,通过视图可以查询和修改他们所能看见的数据

  3. 数据独立:帮助用户屏蔽真实表结构带来的影响

http://www.xdnf.cn/news/641179.html

相关文章:

  • 08_模型训练篇-Torchvision(下):其他有趣的功能
  • 文件操作(C语言版)
  • 12.LCD、FSMC和ILI9341芯片
  • python中pandas之dataframe知识
  • 文本存入向量数据库流程
  • Python海龟绘图(turtle模块)常考知识点总结
  • 【数据结构】线性表之“双链表(带头循环双向链表)”
  • java 加密算法的简单使用
  • Linux系统中实时查看日志
  • Unity3D仿星露谷物语开发50之初始化农作物
  • day27:零基础学嵌入式之进程
  • Docker镜像存储路径迁移指南(解决磁盘空间不足问题)
  • Nginx安全防护
  • 基于Python Anaconda环境,使用CNN-LSTM模型预测碳交易价格的完整技术方案
  • 大模型与训练与微调
  • Java基础 Day20
  • 嵌入式自学第二十七天
  • ST表——算法的优化
  • TCP 和 UDP 的区别
  • 电梯调度算法详解与Python实现
  • 页表:从虚拟内存到物理内存的转换
  • C语言初阶--操作符
  • 消息队列kafka的基础概念和部署
  • C#、C++、Java、Python 选择哪个好
  • TCP 的三次握手
  • Python Day32 学习
  • 十二、【鸿蒙 NEXT】如何使用系统api实现视频压缩
  • 电子电路:电学都有哪些核心概念?
  • Oracle控制文件损坏恢复方案
  • dify_plugin数据库中的表总结