MySQL数据库视图

视图

为什么使用视图

**视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。**比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他。再比如,人员薪酬是个敏感的字段,那么只给某个级别以上的人员开放,其他人的查询视图中则不提供这个字段。
刚才讲的只是视图的一个使用场景,实际上视图还有很多作用。最后,我们总结视图的优点。

image-20220310132740728

基本概念

视图(VIEW):一个或者多个数据表里的数据的逻辑显示,视图并不存储数据(一般用来隐藏敏感数据,例如:工资,银行卡等)

  • 视图是一种虚拟表,本身是不具有数据的,占用很少的内存空间,它是SQL中的一个重要概念。
  • 视图建立在已有表的基础上,视图赖以建立的这些表称为基表

image-20220310131524928

  • 视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然。

  • 向视图提供数据内容的语句为SELECT语句,可以将视图理解为存储起来的SELECT语句

    • 在数据库中,视图不会保存数据,数据真正保存在数据表中。当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化;反之亦然。
  • 视图,是向用户提供基表数据的另一种表现形式。通常情况下,小型项目的数据库可以不使用视图,但是在大型项目中,以及数据表比较复杂的情况下,视图的价值就凸显出来了,它可以帮助我们把经常查询的结果集放到虚拟表中,提升使用效率。理解和使用起来都非常方便。

  • 视图的优点:简化查询;控制数据的访问

创建视图

  • 在CREATE VIEW语句中嵌入子查询
CREATE [OR REPLACE] 
[ALGORITHM = {UNDEFINED MERGE |TEMPTABLE}]  (这里是算法)
VIEW view_name [(字段列表)]
AS 查询语句
[WITH [CASCADED |LOCAL ] CHECK OPTION]
  • 精简版
CREATE 
VIEW view_name [(字段列表)]
AS 查询语句

创建单表视图

  • 针对单表创建视图
# 针对单表创建视图


CREATE VIEW emps_view
AS SELECT * FROM emps;

SELECT * FROM emps_view;

  • 确定视图中字段名的方式1
CREATE VIEW emps_view2
# 查询语句中字段的别名会作为视图的字段名
AS SELECT employee_id emp_id,last_name lname,salary  
FROM emps
WHERE salary>8000;
  • 确定视图中字段名的方式2
# 小括号内字段的个数与SELECT中字段的个数相同
CREATE VIEW emps_view3 (emp_id,NAME,monthly_sal)
AS SELECT employee_id emp_id,last_name lname,salary 
FROM emps
WHERE salary>8000;

SELECT * FROM emps_view3;	

  • 情况二:视图中的字段在基表中可能没有对应的字段(用了函数)
CREATE VIEW emp_sal
AS 
SELECT department_id,AVG(salary) avg_sal
FROM emps
WHERE department_id IS NOT NULL
GROUP BY department_id;

SELECT * FROM emp_sal;

针对多表(创建联合视图)

SELECT e.`employee_id`,e.`department_id`,d.`department_name`
FROM `depts` d JOIN  `emps` e
ON d.`department_id`=e.`department_id`;
  • 利用视图对数据进行格式化
CREATE VIEW vu_emp_dept1
AS 
SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_info
FROM `emps` e JOIN
`depts` d
ON e.department_id=d.department_id;

SELECT * FROM vu_emp_dept1;

基于视图创建视图

# 2.3基于视图创建视图
CREATE VIEW vu_emp4
AS SELECT first_name , last_name
FROM emps_view;

SELECT * FROM vu_emp4;

查看视图(其实和显示表差不多)

  • 语法一:查看数据库的表对象、视图对象
SHOW TABLES;
  • 语法二:查看试视图的结构
DESC / DESCRIBE 视图名称;
  • 语法三:查看视图的属性信息
#查看视图的属性信息

SHOW TABLE STATUS LIKE '视图名称';

执行结果显示,注释Comment为VIEW,说明该表为视图,其他信息为null,说明这是一个虚表。

image-20220310183242006

  • 语法四:查看视图的详细定义信息
SHOW CREATE VIEW  vu_emp4; 	

image-20220310183347480

视图的DML操作

视图的DML操作和对表的操作几乎没有什么差别,就不再赘述了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值