首页
技术小册
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.2 创建视图 在MySQL数据库中,视图(View)是一个虚拟表,其内容由查询定义。与真实的表不同,视图不包含数据本身,而是存储了用于检索数据的SQL查询语句。通过视图,用户可以以一种更简洁、更易于理解的方式查看复杂的数据集,同时能够保护基表数据的安全性,限制用户对数据的直接访问。在本章中,我们将深入探讨如何在MySQL中创建视图,包括视图的基本概念、创建方法、视图的优势与限制,以及如何通过视图进行数据查询和管理。 #### 12.2.1 视图的基本概念 - **定义**:视图是基于SQL语句的结果集的可视化的表。它实际上并不存储数据,而是当用户对视图进行操作时(如查询),MySQL会根据视图定义的SQL语句动态生成数据。 - **作用**: - **简化复杂查询**:通过封装复杂的SQL查询,使得数据访问更加直观和简单。 - **增强数据安全性**:可以限制用户访问表中的特定行或列,而不必在物理表上设置复杂的权限。 - **逻辑数据独立性**:当基表结构发生变化时(如增加列、修改列名),只要视图的SQL语句仍然有效,视图的结构可以保持不变,从而保护了应用程序的稳定性。 #### 12.2.2 创建视图的语法 在MySQL中,创建视图的基本语法如下: ```sql CREATE VIEW 视图名称 AS SELECT 列名称 FROM 表名称 WHERE 条件; ``` 这里,`视图名称`是你希望创建的视图的名称,`列名称`是从一个或多个表中选择的列,`表名称`是这些列所属的表的名称,而`条件`是可选的,用于指定筛选记录的条件。 #### 12.2.3 示例:创建简单的视图 假设我们有一个名为`employees`的表,包含员工的ID、姓名、部门和薪资等信息。我们可以创建一个视图,仅显示每个部门的员工姓名和部门名称,而不包括薪资等敏感信息。 首先,`employees`表的结构可能如下: ```sql CREATE TABLE employees ( employee_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100), department VARCHAR(50), salary DECIMAL(10, 2) ); ``` 然后,我们可以创建一个名为`employee_departments`的视图,查询每个部门的员工姓名和部门名称: ```sql CREATE VIEW employee_departments AS SELECT name, department FROM employees; ``` 现在,通过查询`employee_departments`视图,我们可以获得每个员工的姓名和所属部门,而无需直接访问`employees`表。 #### 12.2.4 带有条件的视图 视图也可以包含WHERE子句来过滤数据。例如,如果我们只对薪资高于某个水平的员工感兴趣,可以创建如下视图: ```sql CREATE VIEW high_paid_employees AS SELECT name, department, salary FROM employees WHERE salary > 50000; ``` 这个视图`high_paid_employees`将仅包含薪资高于50,000的员工的信息。 #### 12.2.5 视图中的连接(JOIN) 视图同样可以包含JOIN操作,以便从多个表中组合数据。假设我们还有一个`departments`表,存储部门信息,我们可以创建一个视图来显示每个员工的姓名、部门名称以及部门描述: ```sql CREATE VIEW employee_details AS SELECT e.name, d.department_name, d.description FROM employees e JOIN departments d ON e.department = d.department_id; ``` 在这个例子中,我们使用了别名(`e`代表`employees`,`d`代表`departments`)来简化查询,并通过`JOIN`语句将两个表连接起来。 #### 12.2.6 视图的优势与限制 **优势**: 1. **简化数据操作**:通过封装复杂的查询逻辑,使得数据访问更加简单直观。 2. **增强数据安全性**:可以限制对数据的直接访问,保护敏感数据。 3. **逻辑数据独立性**:保护应用程序免受基表结构变化的影响。 **限制**: 1. **性能问题**:如果视图非常复杂,或者基于的基表数据量很大,查询视图可能会很慢。 2. **视图不可更新**:在某些情况下,由于视图的复杂性或基表的限制,视图可能不支持INSERT、UPDATE或DELETE操作。 3. **依赖问题**:如果视图依赖的基表被删除或结构发生重大变化,视图可能会失效或需要重写。 #### 12.2.7 管理和维护视图 - **查看视图定义**:可以使用`SHOW CREATE VIEW`语句查看视图的创建语句。 - **修改视图**:可以使用`CREATE OR REPLACE VIEW`语句来修改现有视图,但通常更推荐的做法是先删除旧视图,然后创建新视图,以避免潜在的错误。 - **删除视图**:使用`DROP VIEW`语句可以删除一个或多个视图。 #### 12.2.8 结论 视图是MySQL中一个强大的功能,它允许开发者以更加灵活和安全的方式管理和访问数据。通过创建视图,可以简化复杂的查询逻辑,提高数据访问的效率,同时增强数据的安全性。然而,开发者也需要注意视图的潜在限制,如性能问题和更新限制,并在实际使用中根据具体需求合理选择和使用视图。在本书的后续章节中,我们将继续探讨MySQL的其他高级功能,帮助读者从入门走向精通。
上一篇:
12.1.2 视图的作用
下一篇:
12.2.1 查看创建视图的权限
该分类下的相关小册推荐:
MySQL从入门到精通(五)
MySQL从入门到精通(三)
细说MySQL(零基础到高级应用)
MySQL 实战 45 讲
MySQL8.0入门与实践
MySQL从入门到精通(一)
SQL零基础到熟练应用(增删改查)
MySQL从入门到精通(二)
MySQL必会核心问题