视图、存储过程与触发器简介
在前面的学习中,你已经掌握了数据库中如何操作数据(增删查改)以及如何提升性能(通过索引)。在本节中,我们将介绍三种非常有用的数据库机制:视图(View)、存储过程(Stored Procedure) 和 触发器(Trigger)。它们在数据封装、重用、自动化操作等方面都扮演着重要角色。
通过本节学习,你将了解:
- 什么是视图,它的作用和使用场景;
- 什么是存储过程,它为什么有利于代码复用和逻辑封装;
- 什么是触发器,它如何帮助你自动响应数据变化。
什么是视图?
1.1 概念
视图(View)是一个虚拟表,它并不实际存储数据,而是基于一条 SELECT 查询定义出来的。
你可以把视图理解为:事先保存好的复杂查询结果的“窗口”,让你可以像操作普通表那样使用它。
1.2 为什么需要视图?
-
简化复杂查询
如果你频繁使用同一条多表联查的语句,可以把它保存为视图,之后就可以通过视图名直接查询。
-
提高可读性
给复杂的业务逻辑起一个简单的视图名,让代码更清晰。
-
实现权限控制
你可以只允许用户访问某个视图,而不开放背后的真实表,从而保护数据。
1.3 示例
-- 定义一个学生和班级信息的视图
CREATE VIEW student_info AS
SELECT s.id, s.name, c.class_name
FROM students s
JOIN classes c ON s.class_id = c.id;
-- 查询视图就像查询一张普通表
SELECT * FROM student_info WHERE class_name = '高一三班';
什么是存储过程?
2.1 概念
存储过程(Stored Procedure)是一段事先写好并保存在数据库中的 SQL 代码块,可以反复调用。
它本质上是一个数据库端的“函数”,适合处理复杂的逻辑,比如多条 SQL 批量执行、事务处理、带参数执行等。
2.2 为什么需要存储过程?
- 封装业务逻辑,提升代码复用性;
- 将数据处理逻辑放在数据库中,减少网络通信;
- 可以接受参数,输出结果;
- 执行效率通常更高。
2.3 示例
-- 定义一个简单的存储过程:添加一名学生
CREATE PROCEDURE add_student (
IN p_name VARCHAR(50),
IN p_age INT,
IN p_class_id INT
)
BEGIN
INSERT INTO students (name, age, class_id)
VALUES (p_name, p_age, p_class_id);
END;
-- 调用存储过程
CALL add_student('张三', 18, 101);