MySQL-视图

发布于:2024-04-07 ⋅ 阅读:(110) ⋅ 点赞:(0)

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. 能够分解复杂的查询逻辑


网站公告

今日签到

点亮在社区的每一天
去签到