MySQL视图

MySQL视图

  • 视图
    • 基本使用
    • 视图的限制和规则

视图

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

基本使用

创建视图:
create view viewName as (select 语句);

eg:
测试数据:MySQL视图_第1张图片

  1. 显示员工及其对应的部门名;

分析:
员工名来自emp表、部门名来自于dept表,因此我们可以对这两个表做内连接查询:
SQL语句:select ename,dname from emp inner join dept on emp.deptno<=> dept.deptno;
MySQL视图_第2张图片
2. 查询员工SMITH 的部门名:
select ename,dname from emp inner join dept on emp.deptno<=> dept.deptno where ename='SMITH';
在这里插入图片描述
那如果我要筛选KING、FORD、MILLER等的部门号呢?我们是不是每次都要重新写上面的SQL语句,这样效率是不是太慢了?因为每次查询都要做笛卡尔积,太慢了,同时SQL语句也比较长,难的写;
为此,我们可以将上面的员工名与部门名组成的表当作视图,让其临时存在与内存中,这样我们接下来如果还要查询某个人对应的部门名的话,我们就对这个视图进行操作就行了,减少了每次做笛卡尔积的消耗,同时操作这个视图与操作普通表无异;

打视图:
create view myview as (select ename,dname from emp inner join dept on emp.deptno<=> dept.deptno);
MySQL视图_第3张图片
其中:像emp、dept这样提供原始数据的表叫做基表,myview叫做视图;

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

  1. 将视图中SMITH的名字进行小写:
    MySQL视图_第4张图片
  2. 修改基表中的数据,对视图有影响:
    MySQL视图_第5张图片

删除视图:
drop view viewname;
eg:
drop view myview;
MySQL视图_第6张图片

视图的限制和规则

  1. 视图与表结构一样,必须命名,不能与其它表同名;
  2. 创建视图没有数目限制,但是要考虑复杂查询创建视图之后的性能影响;
  3. 视图不能添加索引,也不能有关联的触发器或者默认值;
  4. 视图可以提高安全性,必须具有足够的访问权限;
  5. order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图
    中的 order by 将被覆盖;
    eg:
    MySQL视图_第7张图片
    在上面的例子中,查询结果将按照column2的值进行排序,而不是按照在视图中定义的column1排序。
  6. 视图可以和表一起使用

你可能感兴趣的:(MySQL,mysql)