MySQL-视图
使用场景:
①使用表的一部分而不是所有表
②针对不同的用户制定不同的查询视图。
理解:
①视图是一种 虚拟表 ,本身是 不具有数据 的,占用很少的内存空间
②视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。
③视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然。
④将视图理解为存储起来的 select 语句
⑤是向用户提供基表数据的另一种表现形式。
视图的创建
CREATE [OR REPLACE] #创建或更新
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] #LGORITHM: 这是一个可选的关键字,用于指定在创建视图时使用的算法。
#UNDEFINED(默认值):让数据库自行选择最适合的算法。
#MERGE: 使用合并算法创建视图,该算法通常执行较快,但不支持所有类型的视图。
#TEMPTABLE:强制创建一个临时表来存储视图的结果集,然后查询该临时表以获取结果。虽然这种算法可能会产生额外的磁盘 I/O 操作,但是在某些情况下,它可以解决一些复杂的视图定义问题。
VIEW 视图名称 [(字段列表)]
AS 查询语句
[WITH [CASCADED|LOCAL] CHECK OPTION] # 用于创建带有检查选项的视图,强制确保对视图的任何更新操作都满足视图定义中指定的条件。
#或
CREATE VIEW 视图名称
AS 查询语句
#示例
CREATE OR REPLACE VIEW employee_view AS
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE department_id = 10
WITH CHECK OPTION;
#创建一个名为 employee_view 的视图,该视图从 employees 表中选择部门 ID 为 10 的员工的 ID、名字和薪水。同时,带有 WITH CHECK OPTION 的语句确保任何对该视图的更新都必须满足 department_id = 10 的条件。
查看视图
#查看数据库的表对象、视图对象
SHOW TABLES;
#查看视图的结构
DESC / DESCRIBE 视图名称;
# 查看视图信息(显示数据表的存储引擎、版本、数据行数和数据大小等)
SHOW TABLE STATUS LIKE '视图名称'\G
#查看视图的详细定义信息
SHOW CREATE VIEW 视图名称;
修改\更新视图
ALTER VIEW 视图名称
AS
查询语句
存下以下相关情况不支持视图更新:
①在定义视图的时候指定了“ALGORITHM = TEMPTABLE”,视图将不支持INSERT和DELETE操作;
②视图中不包含基表中所有被定义为非空又未指定默认值的列,视图将不支持INSERT操作;
③在定义视图的SELECT语句中使用了 JOIN联合查询 ,视图将不支持INSERT和DELETE操作;
④在定义视图的SELECT语句后的字段列表中使用了数学表达式 或 子查询 ,视图将不支持INSERT,不支持UPDATE使用了数学表达式、子查询的字段值;
⑤在定义视图的SELECT语句后的字段列表中使用 DISTINCT 、 聚合函数 、 GROUP BY 、 HAVING 、UNION 等,视图将不支持INSERT、UPDATE、DELETE;
⑥在定义视图的SELECT语句中包含了子查询,而子查询中引用了FROM后面的表,视图将不支持INSERT、UPDATE、DELETE;
⑦视图定义基于一个 不可更新视图 ;
⑧常量视图。
删除视图
仅仅事删除视图定义,不会删除基表的数据
DROP VIEW IF EXISTS 视图名称
总结:
1.操作简单
2. 减少数据冗余
3. 数据安全
4. 适应灵活多变的需求
5. 能够分解复杂的查询逻辑