首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
11.1 索引概述
11.1.1 MySQL索引概述
11.1.2 MySQL索引分类
11.2 创建索引
11.2.1 在建立数据表时创建索引
11.2.2 在已建立的数据表中创建索引
11.2.3 修改数据表结构以为数据表添加索引
11.3 删除索引
12.1 视图概述
12.1.1 视图的概念
12.1.2 视图的作用
12.2 创建视图
12.2.1 查看创建视图的权限
12.2.2 创建视图
12.2.3 创建视图的注意事项
12.3 视图操作
12.3.1 查看视图
12.3.2 修改视图
12.3.3 更新视图
12.3.4 删除视图
第13章 数据完整性约束
13.1 定义完整性约束
13.1.1 实体完整性
13.1.2 参照完整性
13.1.3 用户定义完整性
13.2 命名完整性约束
13.3 更新完整性约束
13.3.1 删除完整性约束
13.3.2 修改完整性约束
第14章 存储过程与存储函数
14.1 创建存储过程和存储函数
14.1.1 创建存储过程
14.1.2 创建存储函数
14.1.3 变量的应用
14.1.4 光标的应用
14.2 调用存储过程和存储函数
14.2.1 调用存储过程
14.2.2 调用存储函数
14.3 查看存储过程和存储函数
14.3.1 SHOW STATUS语句
14.3.2 SHOW CREATE语句
14.4 修改存储过程和存储函数
14.5 删除存储过程和存储函数
15.1 MySQL触发器
15.1.1 创建MySQL触发器
15.1.2 创建具有多条执行语句的触发器
15.2 查看触发器
15.2.1 SHOW TRIGGERS语句
15.2.2 查看triggers表中触发器信息
15.3 使用触发器
15.3.1 触发器的执行顺序
15.3.2 使用触发器维护冗余数据
15.4 删除触发器
第16章 事务
16.1 事务机制
16.1.1 事务的概念
16.1.2 事务机制的必要性
16.1.3 关闭MySQL自动提交
16.1.4 事务回滚
16.1.5 事务提交
16.1.6 MySQL中的事务
16.1.7 回退点
16.2 锁机制
16.2.1 MySQL锁机制的基本知识
16.2.2 MyISAM表的表级锁
16.2.3 InnoDB表的行级锁
16.2.4 死锁的概念与避免
16.3 事务的隔离级别
16.3.1 事务的隔离级别与并发问题
16.3.2 设置事务的隔离级别
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(四)
小册名称:MySQL从入门到精通(四)
### 12.1.1 视图的概念 在MySQL数据库中,视图(View)是一种虚拟的表,其内容由查询定义。视图并不包含数据本身,而是存储了用于生成数据的SQL语句。当用户对视图进行查询时,数据库会动态地执行这些SQL语句,并返回结果,就好像这些数据是存储在某个实际表中一样。视图的这一特性使得它成为数据库管理和应用中一个极其有用的工具,尤其在数据抽象、安全控制、简化复杂查询等方面表现出色。 #### 1. 视图的基本概念 ##### 1.1 定义与创建 视图是通过SELECT语句创建的,这些语句指定了从一个或多个表中检索数据的方式。创建视图的SQL语法通常遵循以下模式: ```sql CREATE VIEW 视图名称 AS SELECT 列名称 FROM 表名称 WHERE 条件; ``` 这里,`视图名称`是你希望创建的视图的名字,`SELECT`语句定义了从哪个表(或哪些表)中选取哪些列,以及可能的过滤条件。一旦视图被创建,它就可以像普通表一样被查询。 ##### 1.2 视图与表的区别 - **存储方式**:视图不存储数据,而是存储了用于生成数据的SQL查询。表则直接存储数据。 - **物理存在**:视图是逻辑上的表,没有物理存储位置;表在磁盘上有对应的物理存储。 - **更新限制**:视图可以基于SELECT语句的复杂性,对更新操作(INSERT、UPDATE、DELETE)有限制或完全不支持。表则支持所有标准的DML操作。 - **性能**:在某些情况下,通过视图访问数据可能比直接查询基础表更高效,因为视图可以包含复杂的查询逻辑,这些逻辑在视图创建时就被优化和编译。然而,如果视图涉及多个复杂连接或大量数据处理,其性能可能会受到影响。 ##### 1.3 视图的优势 1. **数据抽象**:视图可以隐藏数据的复杂性,只向用户展示他们需要的数据部分,提高数据的安全性。 2. **简化查询**:对于复杂的查询,可以将其封装在视图中,用户只需查询视图即可获得所需结果,无需重复编写复杂的SQL语句。 3. **安全控制**:通过限制对特定视图的访问,可以控制用户对基础数据的访问权限,实现更细粒度的安全控制。 4. **逻辑数据独立性**:当基础表的结构发生变化时(如添加列、修改列名等),只要视图的SELECT语句仍然有效,视图的结构就不会受到影响,从而保持了逻辑数据独立性。 #### 2. 视图的类型 MySQL支持多种类型的视图,但主要基于其可更新性来分类: - **可更新视图**:允许用户通过视图进行INSERT、UPDATE、DELETE操作,但这些操作必须满足特定条件,如视图定义中不包含聚合函数、GROUP BY子句等。 - **不可更新视图**:包含复杂查询(如JOIN、子查询、聚合函数等)的视图通常不允许更新,因为数据库无法确定如何将这些更新映射回基础表。 #### 3. 视图的使用场景 ##### 3.1 数据汇总与报表 当需要定期生成汇总报表或统计数据时,可以将复杂的汇总查询封装在视图中。这样,每次需要报表时,只需简单地查询视图即可,无需重复编写复杂的汇总逻辑。 ##### 3.2 权限控制 通过创建视图,可以限制用户对特定数据的访问。例如,可以创建一个只包含员工基本信息(如姓名、部门)而不包含薪资信息的视图,然后将此视图的访问权限授予所有员工,从而保护敏感数据的安全。 ##### 3.3 数据抽象与简化 对于复杂的数据库架构,通过创建视图可以隐藏表之间的复杂关系,向用户提供更加直观、简单的数据访问接口。这有助于减少用户的学习成本,提高系统的易用性。 ##### 3.4 兼容性维护 当应用程序需要访问的数据结构发生变化时,可以通过修改视图来保持应用程序与数据库的兼容性,而无需修改应用程序的代码。 #### 4. 视图的管理 ##### 4.1 创建视图 除了前面提到的基本语法外,还可以为视图指定其他选项,如是否检查视图的WITH CHECK OPTION子句,该子句用于限制通过视图插入或更新的数据必须符合视图定义中的条件。 ##### 4.2 修改视图 修改视图通常意味着删除旧视图并创建一个新的视图。MySQL不直接支持修改视图定义的命令,但可以使用`CREATE OR REPLACE VIEW`语句来替换现有视图。 ##### 4.3 查看视图定义 可以使用`SHOW CREATE VIEW 视图名称;`命令来查看视图的创建语句。此外,`DESCRIBE`或`DESC`命令也可以用来查看视图的列信息。 ##### 4.4 删除视图 使用`DROP VIEW`语句可以删除一个或多个视图。如果视图依赖于其他视图或表,并且在删除这些依赖对象之前尝试删除视图,可能会遇到错误。 #### 5. 注意事项 - 视图虽然强大,但不应过度使用。过度依赖视图可能会降低数据库的性能,特别是在处理大量数据时。 - 视图中的SELECT语句应尽可能优化,以减少查询时间和资源消耗。 - 在使用可更新视图时,要特别注意更新操作的限制和可能产生的副作用。 - 视图的安全性依赖于数据库的安全策略和用户权限管理。确保只有授权用户才能访问敏感数据的视图。 总结而言,视图是MySQL中一个功能强大且灵活的工具,它能够在不改变原有数据表结构的情况下,提供数据的抽象、简化复杂查询、实现安全控制等多种功能。通过合理使用视图,可以显著提升数据库应用的性能和可维护性。
上一篇:
12.1 视图概述
下一篇:
12.1.2 视图的作用
该分类下的相关小册推荐:
MySQL从入门到精通(三)
MySQL 实战 45 讲
MySQL8.0入门与实践
MySQL必会核心问题
MySQL从入门到精通(二)
MySQL从入门到精通(一)
细说MySQL(零基础到高级应用)
MySQL从入门到精通(五)
SQL零基础到熟练应用(增删改查)