当前位置: 首页 > 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] 参数名 数据类型,...)
BEGINSQL 语句;
END;

        3.3 示例:   

CREATE PROCEDURE GetEmployee(IN emp_id INT)
BEGINSELECT * 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
BEGINIF NEW.salary < 0 THENSIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Salary cannot be negative';END IF;
END;

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

5.总结:

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • TCP客户端编码和解码处理:发送和接收指定编码消息
  • 速通GPT:《Improving Language Understanding by Generative Pre-Training》全文解读
  • 【字幕】恋上数据结构与算法之012复杂度07leetcode
  • 小程序——生命周期
  • 【Unity基础】如何选择脚本编译方式Mono和IL2CPP?
  • 数据驱动的生态系统架构:打造智能化管理与业务增长的未来战略
  • 强烈建议!所有Python基础差的同学,死磕这本64页的背记手册
  • go语言后端开发学习(七)——如何在gin框架中集成限流中间件
  • 系统编程-初识MCU
  • 滚雪球学SpringCloud[2.2]:Consul与Zookeeper服务注册
  • 【AI大模型】Kimi API大模型接口实现
  • 【python计算机视觉编程——9.图像分割】
  • 从头开始学MyBatis—02基于xml和注解分别实现的增删改查
  • C++——⼆叉搜索树
  • eMule firewall config - iptables forward rules
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 30秒的PHP代码片段(1)数组 - Array
  • CAP 一致性协议及应用解析
  • js对象的深浅拷贝
  • Js基础知识(一) - 变量
  • leetcode-27. Remove Element
  • oschina
  • springMvc学习笔记(2)
  • Terraform入门 - 3. 变更基础设施
  • 爱情 北京女病人
  • 分布式任务队列Celery
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 前端技术周刊 2019-02-11 Serverless
  • 如何设计一个微型分布式架构?
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​MySQL主从复制一致性检测
  • ​水经微图Web1.5.0版即将上线
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十二)Flink Table API
  • (源码分析)springsecurity认证授权
  • (转)【Hibernate总结系列】使用举例
  • (转)平衡树
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .net core Swagger 过滤部分Api
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .Net Web窗口页属性
  • .net 发送邮件
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • .Net中间语言BeforeFieldInit
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?