欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > MySQL:12_视图

MySQL:12_视图

2025/5/30 10:45:09 来源:https://blog.csdn.net/Open__Ai/article/details/148203386  浏览:    关键词: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. 数据独立:帮助用户屏蔽真实表结构带来的影响

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词