• 十三、MySql的视图


    一、前言

    通过视图,可以展现基表(用来创建视图的表)的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。
    视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。
    对视图的修改:单表视图一般用于查询和修改,会改变基本表的数据,多表视图一般用于查询,不会改变基本表的数据。

    二、定义

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

    三、为什么使用视图

    1)简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。

    2)安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。

    3)数据独立:一旦视图的结构确定了,可以屏蔽表结构变化对用户的影响,源表增加列对视图没有影响;源表修改列名,则可以通过修改视图来解决,不会造成对访问者的影响。

    总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。

    四、基本使用

    (—)创建视图

    create view 视图名 as select语句;
    
    • 1

    对于创建视图中的 SELECT 语句的指定存在以下限制:

    • 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。
    • SELECT 语句不能引用系统或用户变量。
    • SELECT 语句不能包含 FROM 子句中的子查询。
    • SELECT 语句不能引用预处理语句参数。

    (二)案例

    select * from v_ename_dname order by dname;
    
    • 1

    1.修改了视图,对基表数据有影响

    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';
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.修改了基表,对视图有影响

    mysql> update EMP set deptno=10 where ename='JAMES'; -- 修改基表
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1 Changed: 1 Warnings: 0
    mysql> select * from v_ename_dname where ename='JAMES';
    +-------+----------+
    | ename | dname    |
    +-------+----------+
    | JAMES | RESEARCH | <== 视图中的数据也发生了变化
    +-------+----------+
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    3.删除视图

    drop view 视图名;
    
    • 1

    五、视图规则和限制

    • 与表一样,必须唯一命名(不能出现同名视图或表名)
    • 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
    • 视图不能添加索引,也不能有关联的触发器或者默认值
    • 视图可以提高安全性,必须具有足够的访问权限
      -order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图
      中的 order by 将被覆盖
    • 视图可以和表一起使用
  • 相关阅读:
    第五章 数据库设计和事务 ① 笔记
    飞书开发学习笔记(六)-网页应用免登
    给文件夹加密的两种方法
    Qt/Flutter/Lvgl/Native,总有一个适合你的UI
    FFT64点傅里叶变换verilog蝶形运算,代码和视频
    vivo 商品中台的可视化微前端实践
    redis应用——实现访问量案例(redis+定时任务+分布式锁)
    多表查询和连接查询
    DTDX991A 61430001-UW 自由IOT引入人工智能功能
    33、菜谱大全API接口,免费好用
  • 原文地址:https://blog.csdn.net/weixin_54447296/article/details/133148251