MySQL的视图

1.常见的数据库对象

    •   表:存储数据的逻辑单元,以行列形式存在

    •   数据字典:系统表,存放数据库相关信息表

    •   约束:用于保证数据完整性的规则

    •   视图:一个或多个数据表数据的逻辑显示,不存储数据

    •   索引:用于提高查询性能

    •   存储过程:用于完成一次完整的业务处理,无返回值

    •   存储函数:用于完成一个特定计算,具有一个返回值

    •   触发器:相当于事件监听器,数据库发生特定事件后,触发器被触发,完成相应的处理

2.视图基本概念

    •   视图的作用:节约内存,权限功能(比如针对不同用户制定查询视图)

    •   视图是一种虚拟表,本身不具有数据,占用很少的内存空间

    •   视图建立在已有表的基础上,这些表叫做基表

    •   视图中的增删改查,基表中也会相应变化

    •   视图就是 - 存储起来的select语句

    •   视图本身的创建与删除不会影响基表

    •   视图的应用场景:针对于小型项目,不推荐使用视图。针对于大型项目,可以考虑使用视图

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

    •   视图的不足:数据表中结果变更后,要及时对相关视图进行维护;视图维护复杂,可读性不好,容易变成系统得潜在隐患

3.视图的增删改查

    •   创建视图

#1.单表

CREATE VIEW employee_vu(last_name,employee_id,department_id)
AS
SELECT last_name,employee_id,department_id
FROM employees;

#2.多表

CREATE VIEW emp_v2
AS
SELECT department_id,m_sal
FROM (
	SELECT department_id,MAX(salary) m_sal
	FROM emps
	WHERE department_id IS NOT NULL
	GROUP BY department_id
	) t_m_tal
WHERE m_sal > 12000;

    •   查看视图

#2. 显示视图的结构

#查看数据库的表对象、视图对象
SHOW TABLES;

#查看视图结构
DESC employee_vu;

#查看视图的属性信息
SHOW TABLE STATUS LIKE 'employee_vu';

#查看视图的详细定义
SHOW CREATE VIEW employee_vu;

   •   插入视图数据

INSERT INTO emp_v2(department_id,m_sal)
VALUES(10,9999);

   •   修改视图 - create or replace view

#将视图 emp_v1 修改为查询电话号码以‘011’开头的并且邮箱中包含 e 字符的员工姓名和邮箱、电话号码

CREATE OR REPLACE VIEW emp_v1
AS
SELECT last_name,email,phone_number
FROM emps
WHERE phone_number LIKE '011%'
AND email LIKE '%e%';

   •   删除视图 - drop view

#删除视图emp_v2 和 emp_v1
DROP VIEW emp_v1;
DROP VIEW emp_v2;

 注意:

   •   查询语句中字段的别名可以会视图中字段名出现

   •   可以在表名后()内确定字段名

   •   更新/增删改 视图中的数据:更新视图中的数据,会导致基表中数据的修改;更新表中的数据,也会导致图中的数据的修改

   •   更新失败的情况:如果视图中有基表中不存在的字段,就会失败

   •   虽然视图能更新数据,但视图主要方便查询,不建议更新。即使要更改数据也会在基表中完成

4.视图的优点与不足

优点:

        减少数据冗余:视图能够存储查询语句,从查询语句获取结果集,减少了冗余数据

        数据更为安全:通过将查询的结果集作为视图呈现,对用户实行了访问限制

        分解查询逻辑:将复杂的查询逻辑分解,创建多个视图存储结果集,然后结合实现复杂逻辑

缺点:

        增加维护成本:基表改变后,视图也要进行相应维护,增加了维护成本

  

你可能感兴趣的:(oracle,数据库)