Mysql 视图&存储过程&触发器

初识:

在 MySQL 中,视图(View)、存储过程(Stored Procedure)和触发器(Trigger)是用于管理和操作数据库的高级功能。它们各自有不同的用途和优势。

  1. 视图 (View)

视图是一个虚拟表,它是从一个或多个表中获取数据的结果。视图并不存储数据本身,而是保存查询结果的结构。因此,视图可以用于简化复杂的查询,并提高代码的可读性和可维护性。

2.1 视图的用途

  • 简化复杂的 SQL 查询。
  • 对敏感数据进行访问控制,展示部分数据。
  • 提供一致的数据接口给用户或应用程序。

2.2 视图的创建语法

sql 复制代码
CREATE VIEW 视图名 AS
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件;

2.3 示例:

sql 复制代码
CREATE VIEW employee_salary AS
SELECT name, salary
FROM employees
WHERE salary > 5000;
  1. 存储过程 (Stored Procedure)

存储过程是预编译的 SQL 语句集合,存储在数据库中,并可以重复调用。存储过程通过减少网络通信、重用代码、以及更好地管理事务来提高数据库的性能。

3.1 存储过程的用途

  • 自动化重复性操作。
  • 减少网络通信负担。
  • 提供参数化的复杂操作。

3.2 存储过程的创建语法:

sql 复制代码
CREATE PROCEDURE 存储过程名 ([IN | OUT | INOUT] 参数名 数据类型,...)
BEGIN
    SQL 语句;
END;

3.3 示例

sql 复制代码
CREATE PROCEDURE GetEmployee(IN emp_id INT)
BEGIN
    SELECT * FROM employees WHERE id = emp_id;
END;

3.4 调用存储过程

sql 复制代码
CALL GetEmployee(1);

4 . 触发器 (Trigger)

触发器是当数据库中的某个事件(如插入、更新或删除)发生时自动执行的 SQL 代码。它通常用于执行自动化任务,例如数据验证、记录历史数据、维护数据一致性等。

4.1 触发器的用途

  • 自动进行数据检查和验证。
  • 维护数据的完整性和一致性。
  • 记录数据更改历史。

4.2 触发器的创建语法

sql 复制代码
CREATE TRIGGER 触发器名
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON 表名 FOR EACH ROW
触发器体;

4.3 示例:

sql 复制代码
CREATE TRIGGER before_employee_insert
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
    IF NEW.salary < 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Salary cannot be negative';
    END IF;
END;

在这个例子中,当插入员工记录时,如果工资为负数,则触发器会阻止插入操作并抛出错误。

5.总结:

  • 视图:虚拟表,用于简化复杂查询或限制数据访问。不保存查询结果,只保存查询的SQL逻辑。(简单,安全,数据独立)
  • 存储过程:预编译的 SQL 语句集,用于执行复杂逻辑。
  • 触发器:自动在特定数据库事件发生时执行的 SQL 代码,常用于维护数据完整性。

这些工具在数据库管理中可以大大简化操作、提高性能并确保数据的准确性。

相关推荐
.Shu.1 小时前
Mysql InnoDB 底层架构设计、功能、原理、源码系列合集【五、InnoDB 高阶机制与实战调优】
数据库·mysql
新法国菜3 小时前
MySql知识梳理之DDL语句
数据库·mysql
DarkAthena3 小时前
【GaussDB】全密态等值查询功能测试及全密态技术介绍
数据库·gaussdb
ShawnLeiLei4 小时前
2.3 Flink的核心概念解析
数据库·python·flink
石皮幼鸟5 小时前
数据完整性在所有场景下都很重要吗?
数据库·后端
大只鹅5 小时前
Centos7.9 Docker26容器化部署 MySql9.4 一主一从的同步复制部署
mysql·centos
叁沐6 小时前
MySQL 28 读写分离有哪些坑?
mysql
nightunderblackcat6 小时前
新手向:异步编程入门asyncio最佳实践
前端·数据库·python
DarkAthena6 小时前
【GaussDB】使用MySQL客户端连接到GaussDB的M-Compatibility数据库
数据库·mysql·gaussdb
livemetee7 小时前
Flink2.0学习笔记:使用HikariCP 自定义sink实现数据库连接池化
大数据·数据库·笔记·学习·flink