zoukankan      html  css  js  c++  java
  • MySQL-视图

    1.概念:

    1. 视图是 MySQL 在 5.0.1 版本中加入的功能。它可以理解为一个虚表。
    2. 之所以被称为虚表,是因为它只是存储了一个结构,并不存储真实的数据。它的数据是在查询过程中动态生成的。
    3. 视图并不是真的优化
    2.创建视图:视图 只是存储了一个结构,并不存储真实的数据。
    --CRUD
    select id,user_name,email from `user`;
    --创建视图 
    create VIEW user_view as select id,user_name,email from `user`;
     
    3.查看视图:和表一样,我们可以用 desc 视图名;来查看视图的每一列
    desc user_view; 
    --查看创建的视图语法 
    show create view user_view; 
    --查询视图内容
    select * from user_view;

    >注意:视图查询的数据实则来自与源数据中的内容,而它本质是一个存储了一个结构,并不是存储真实的数据。

    >比如:如同PHP中的一个查询方法的封装
     
    4.视图优点:
    1. 第一个显著优点就是它简化了操作。此时我们完全不用关心视图是怎么处理数据的,我们只需要知道如何使用这个结果集即可,视图相当于一个中间层。
    2. 第二个显著优点就是它更加安全。比如我们可以让用户有权去访问某个视图,但是不能访问原表,这样就可以起到保护原表中某些数据的作用。
    3. 我们之后会接触到管理权限,权限是无法细致到某一个列的,通过视图,则很容易实现。
    4. 第三个显著优点就是降低耦合。假如我们以后要修改原表的结构,那么我们可以通过修改视图的定义即可,而不用修改应用程序,对访问者是不会造成影响
      的,一般来说,这样代价会更小。

    5.视图缺点:

    1. 表结构修改则需要手动修改视图
    2. 视图并不能对查询优化,因此在处理大数据的时候,甚至会对性能有些影响。

    6.视图IUD:表是可以更新数据的,这里的更新,指的是”增删改”,但是对于视图来说不一定。

    update `user` set email = '247301260@qq.com' where id = 1; select * from user_view;
    --删除视图
    DROP VIEW user_view_2;
    以下是视图不可更新的情况
    1. 包含聚合函数、distinct、group by、having、union、union all。
    2. 常量视图。
    3. select 包含子查询。
    4. 包含连接操作。
    5. from 一个不能更新的视图。
    6. where 子句的子查询引用了 from 子句中的表。
    7.视图应用&好处
    1. 提高了重用性,就像一个函数
      --如果要频繁获取user的name和goods的name。就应该使用以下sql语言。
      --示例:
      select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id; 
      --但有了视图就不一样了,创建视图other。
      --示例:
      create view other as select a.name as username, b.name as goodsname from user as a, goods as b, ug as c where a.id=c.userid and c.goodsid=b.id; 
      --创建好视图后,就可以这样获取user的name和goods的name。
      --示例: 
      select * from other; 
      --以上sql语句,就能获取user的name和goods的name了。
    2. 对数据库重构,却不影响程序的运行
      --假如因为某种需求,需要将user拆房表usera和表userb,该两张表的结构如下 
      --测试表:usera有id,name,age字段
      --测试表:userb有id,name,sex字段 
      --这时如果php端使用sql语句:
      select * from user;
      --那就会提示该表不存在,这时该如何解决呢。
      --解决方案:创建视图。
      --以下sql语句创建视图: 
      create view user as select a.name,a.age,b.sex from usera as a, userb as b where a.name=b.name; 
      --以上假设name都是唯一的。
      --此时php端使用sql语句: 
      select * from user;
      --就不会报错什么的。这就实现了更改数据库结构,不更改脚本程序的功能了。
    3. 提高了安全性能。可以对不同的用户
      --设定不同的视图。例如:某用户只能获取user表的name和age数据,不能获取sex数据。则可以这样创建视图。
      --示例 如下:
      create view other as select a.name, a.age from user as a; 
      --这样的话,使用sql语句:
      select * from other; 
      --最多就只能获取name和age的数据,其他的数据就获取不了了。
    4. 让数据更加清晰想要什么样的数据,就创建什么样的视图。经过以上三条作用的解析,这条作用应该很容易理解了。
     
     
     
  • 相关阅读:
    SQL使用基本准则
    SQL使用技巧-或许你不知道的10条SQL技巧
    RabbitMQ安装遇到的坑
    编译安装python
    批量化杀死进程
    python中[-1]、[:-1]、[::-1]、[n::-1]使用方法
    c++中 . 和 -> 的区别是什么?
    C语言中的malloc、new、memset函数解析
    C语言中static关键字用法
    struct和typedef struct的区别
  • 原文地址:https://www.cnblogs.com/XiaKang/p/13198038.html
Copyright © 2011-2022 走看看