当前位置: 首页 > news >正文

Mysql 视图存储过程触发器

初识:

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

2. 视图 (View)

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

        2.1 视图的用途

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

        2.2 视图的创建语法

CREATE VIEW 视图名 AS
SELECT 列名1, 列名2, ...
FROM 表名
WHERE 条件;

        2.3 示例:

CREATE VIEW employee_salary AS
SELECT name, salary
FROM employees
WHERE salary > 5000;

        3. 存储过程 (Stored Procedure)

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

        3.1 存储过程的用途

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

        3.2 存储过程的创建语法:

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

        3.3 示例:   

CREATE PROCEDURE GetEmployee(IN emp_id INT)
BEGIN
    SELECT * FROM employees WHERE id = emp_id;
END;

        3.4 调用存储过程

CALL GetEmployee(1);

        4. 触发器 (Trigger)

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

        4.1 触发器的用途

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

        4.2 触发器的创建语法

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

        4.3 示例:

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 代码,常用于维护数据完整性。

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

相关文章:

  • Spring系统学习(一)——初识Spring框架
  • Nginx实用篇:实现负载均衡、限流与动静分离
  • JVM虚拟机基础知识
  • 线性规划------ + 案例 + Python源码求解(见文中)
  • ArrayList的扩容机制
  • Linux帮助命令
  • 地面站通过SSH连接无人机
  • Android 开发入门教程-入门基础
  • 【vue element-ui】关于删除按钮的提示框,可一键复制
  • Unity之FPS
  • 日志收集工具 Fluentd vs Fluent Bit 的区别
  • docker面经
  • 算法-深度拷贝链表(138)
  • 目标检测中的非极大值抑制(NMS):步骤与Python实现
  • 乐观锁、悲观锁
  • 容器技术--Dockerfile 构建镜像
  • 【有啥问啥】弱监督学习新突破:格灵深瞳多标签聚类辨别(Multi-Label Clustering and Discrimination, MLCD)方法
  • Linux内核启动流程
  • 如何编写ChatGPT提示词
  • 前端面试记录
  • 上海市重大工程一季度开局良好,崇明线等按既定计划加快建设
  • 美国和沙特签署上千亿美元军售协议
  • 落实中美经贸高层会谈重要共识,中方调整对美加征关税措施
  • 智利观众也喜欢上海的《好东西》
  • 拿出压箱底作品,北京交响乐团让上海观众享受音乐盛宴
  • 最快3天开通一条定制公交线路!上海推出服务平台更快响应市民需求