zoukankan      html  css  js  c++  java
  • MySQL使用视图

    为什么使用视图?

       既然视图存在那就有它存在的必要。换言之,它有优点。

    优点:

    • 重用SQL语句
    • 简化复杂的SQL操作。编写查询后,可以方便地重用它而不必知道它而不必知道它的基本查询细节。
    • 使用表地组成部分而不是整个表
    • 保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限
    • 更改数据格式和表示。视图可返还与底层表的表示和格式不同的数据

    有优点就有缺点

    缺点:

    • 视图不能索引,触发器,默认值或者规则。数据多时会造成影响。
    • 如果用多个连接和过滤条件创建了视图或者嵌套了视图,可能会十分影响性能。

    一、视图是什么?

        视图是一个虚拟存在的表,和真实表一样是由行和列构成,视图的数据却不存在于数据库中,存在视图中的只是视图的定义。视图中的数据完全来自于表中,是在使用视图时获取的。视图和表的本质在于视图是基于真实表的一张虚拟的表,它的数据来源于真是表的基础上。

    打个比方:真实表与视图,就如同一个物体照镜子,真实表就是就是那个物体,视图就是物体映在镜子里的图像。两者虽说在看着一样,但是镜子的图像是虚拟的,当物体改变时,镜子里映射的影像也会改变。

    二、创建视图

           语法 create view 视图名  as select语句

            视图名:视图名必须是唯一命名,新创建的视图名不能和其他的视图名和其他的表名相同

            select语句:指的是创建视图的select语句

    例如:创建一个视图

    select c.last_name, c.first_name, b.dept_name, c.birth_date
    from dept_emp a,
         departments b,
         employees c
    where a.dept_no = b.dept_no
      and a.emp_no = c.emp_no;

    如果我们要查看查看视图字段情况的的话,可以 采用 describe 视图名

    describe  v_user;

    如果要查看创建视图的SQL,可以 show create view  视图名

    show create view v_user;

    二、修改视图

    一般将视图用于查询而不是更新用的。要更新的话

    采用 alter view 视图名 as select语句   也可以先删除再创建

    并不是所有的视图都可以更新的,视图定义中存在以下情况,则是不允许更新的

    • 分组  使用order by 或者 having
    • 聚集函数
    • union或者union all的并操作
    • 子查询
    • distinct关键字

    比如,在原视图里减少一个生日字段

    alter view v_user as select c.last_name, c.first_name, b.dept_name
                         from dept_emp a,
                              departments b,
                              employees c
                         where a.dept_no = b.dept_no
                           and a.emp_no = c.emp_no;

    三、删除视图

    那就是 drop view 视图名

    drop view  v_user;

    四、查询视图

      如果我们要使用视图查询

    select * from v_user;

    它等价于

    select c.last_name, c.first_name, b.dept_name
                         from dept_emp a,
                              departments b,
                              employees c
                         where a.dept_no = b.dept_no
                           and a.emp_no = c.emp_no;

    这样看来视图的确是简化了sql 。

    生于忧患,死于安乐
  • 相关阅读:
    C语言指针入门
    c的动态内存管理
    汇编入门基础与helloworld
    汇编1
    汇编2——完整的例子集合
    算法与数据结构——选择,插入,希尔排序
    MySQL
    MySQL 笔记
    CSS样式优先级
    GIT使用笔记
  • 原文地址:https://www.cnblogs.com/songlove/p/15570011.html
Copyright © 2011-2022 走看看