MySQL 之视图

本文介绍了数据库视图的概念及其应用,包括视图的创建、修改与删除方法,并探讨了视图如何简化复杂的查询语句、实现数据权限控制及在大数据场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是视图?
    视图是一种虚表,建立在已有表的基础上, 视图赖以建立的这些表称为基表,可以将视图理解为存储起来的 SELECT 语句。

2.什么时候要用到视图?
    如果某个查询结果出现的非常频繁,也就是,要经常拿这个查询结果来做子查询 。

3.视图的创建语法:
    create view 视图名 as select 语句;

4.使用视图有什么好处呢?

(1) 简化查询语句
  比如:有一张员工表,查询每个部门的平均薪资
            SELECT department_id,avg(salary) FROM employees GROUP BY  department_id;
  这时候我们就可以创建一张视图:
            create view avgPriceDept as SELECT department_id,avg(salary) FROM employees GROUP BY  department_id;
  创建完,以后我们要查询每个部门的平均薪资,只要这么写:
            SELECT * FROM avgPriceDept;

(2) 可以进行权限控制
    把表的权限封闭,但是开放相应的视图权限,视图里只开放部分数据列。
    比如我们的employees员工表,我们不想让别人看到我们员工的manager_id,这时候我们就可以把查看manager_id的权限封闭,创建一张视图
        CREATE VIEW showdepartment as select department_id,department_name,location_id from departments;
        SELECT * FROM showdepartment;
    不出现员工所属的manager_id 就可以了。

(3) 大数据分表时可以用到
    比如表的行数据超过200万行时,速度就会变慢
    可以把一张表的数据拆成4张表来存放
    News表
    newsid  1,2,3,4...
    news1,news2,news3,news4表
    把一张表的数据分散到4张表里,分散的方法有很多,
    最常用的是id取模来计算
    id%4+1=[1,2,3,4]
    ...
    还可以用视图,把四张表形成一张视图
    create view news as select * from news1 union select * from news2 union ...

5.视图的修改
    alter view 视图名 as select 语句;
select * from emp_vw2;
select * from employees;

create or replace view emp_vw2
as
select employee_id, last_name, salary
from employees
with read only; --修改只读视图

6. 删除视图
drop view emp_vw3;

7.视图与表的关系
    视图是表的查询结果,自然表的数据变了,会影响视图的结果

8.那么视图改变了会影响到表吗?
  [1] 视图的增删改也会影响表;
  [2] 但视图并不总是能增删改的;
       视图的数据与表的数据一一对应时可以修改;
       对于视图的insert还应注意:视图必须包含表中没有默认值的列。
   [3] 视图的创建分为创建 简单视图 和 复杂试图,简单视图不仅可以进行查询,还可以进行增删改,而复杂试图只能进行查询,不能进行增删改。
create view emp_vw3
as
select department_id, avg(salary) "avg_sal"
from employees
group by department_id;

select * from emp_vw3;

update emp_vw3
set "avg_sal" = 10000
where department_id = 100;
        以上创建复杂视图 ,只能查询,不能增删改,操作增删改的时候会报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值