zoukankan      html  css  js  c++  java
  • 浅谈MySQL视图的作用

    视图: view, 是一种不存在的虚拟表: 类似表但是不是表

    • 类似表: 视图有表结构
    • 不是表: 没有数据, 视图的数据来源都是基表

    视图根据基表的数量分为两种

    单表视图: 基表只有一个

    多表视图: 基表至少两个以上

    执行了视图的创建语句之后: 到底发生了什么?

    1、会在对应的数据库的表空间中产生一个视图(表)
    2、会在数据库对应存储文件夹下产生一个结构文件

    一、查看视图

    视图是虚拟表: 有类似的表结构: 凡是表的查看结构所能用的都可以用在视图上面

    像表一样查看: show tables;

    查看视图结构: desc 视图名字;

    查看创建语句

    还可以使用view关键字

    二、修改视图

    视图的修改与创建类似: 视图结构是从其他表获取过来: 修改的是视图的获取方式.
    alter view 视图名 as 新的select语句;

    三、删除视图

    drop view 视图名字;

    删除视图发生了什么?

    1、数据库没有视图结构
    2、数据库文件夹下也不存在对应的视图结构文件

    四、使用视图

    视图的使用: 与表一样的使用(主要用于查询数据)

    视图自身没有数据: 所有的数据来源都是基于原视图内部的查询语句.

    五、视图数据操作

    通过视图进行数据的写操作(增删改)

    多表视图(基表来源两个以上)不能插入数据, 也不能删除数据: 但是可以修改数据

    插入数据

    删除数据

    修改数据: 本身就是对基表进行操作

    单表视图操作: 可以进行增删改, 但是要实现新增: 前提是视图必须包含基表的所有不能为空的字段

    插入数据: 视图包含所有基表不为空的字段

    插入数据: 视图不包含全部的基表不为空的字段

    几乎不可能通过视图对表进行数据新增操作

    视图更新限制: with check option
    当视图原本可以查看到的数据,在经过视图修改的时候,如果修改之后,视图不能查出来: 更新失败

    视图修改: 效果验证

    六、视图算法

    理论上: 每一个视图都有算法

    视图算法有三种:

    • undefined: 未定义的,默认的: 但是该算法不是真正算法: 真正的执行算法只有temptable和merge: undefined是指交给系统自动选择(系统优先选择merge: 效率高)
    • temptable: 临时表,表示视图对应的select语句单独执行(先)
    • merge: 合并算法: 表示视图的对应的select语句不是单独执行, 而是与外部的select语句先进行合并, 后进行执行.

    视图: create view v1 as select语句;
    查询视图: select * from v1; -- select * from (select 语句) 别名;

    需求: 求出每个班年龄最大的一个学生.

    大部分的时候都会使用视图的默认算法: 但是如果涉及到视图与外部的select语句中有些五子句的关系顺序的时候: 一般使用temptable

    七、视图意义

    1、视图可以将复杂的SQL查询语句进行了封装: 简化了SQL语句: 从而提升了带宽的使用效率和网络间的传输效率

    2、视图的存在: 主要是为了对外提供数据支持(外部系统)

    • 隐藏基表字段(隐私)
    • 保证了数据库的数据安全(保护数据库内部的数据结构)
    • 可以灵活的控制对外的数据: 保证针对每个接口都有一个单独的数据支持: 增强了用户友好性.

    3、视图利于权限控制: 有助于数据库对权限进行管理.

  • 相关阅读:
    [20190502]给显示输出加入时间戳.txt
    [20190423]oradebug peek测试脚本.txt
    [20190423]简单测试latch nowilling等待模式.txt
    [20190423]那个更快的疑问3.txt
    [20190419]shared latch spin count 2.txt
    [20190419]shared latch spin count.txt
    [20190418]exclusive latch spin count.txt
    [20190417]隐含参数_SPIN_COUNT.txt
    Java写时复制CopyOnWriteArrayList
    Python 定义常量
  • 原文地址:https://www.cnblogs.com/chenjiacheng/p/6522323.html
Copyright © 2011-2022 走看看