MySQL存储过程与触发器

存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后,再次调用不需要重复编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它

为什么要使用存储过程

  1. 业务流程复杂

业务复杂时,SQL语句相互依赖,顺序执行

  1. 频繁访问数据库

每条SQL语句都需单独连接和访问数据库

  1. 先编译后执行

SQL语句的执行需要先编译

创建存储过程

CREATE PROCEDURE (

\[IN \|OUT \|INOUT \] 参数名 数据类型...\]) BEGIN DECLARE 变量 变量类型 END 说明: • '\[ \]'内容不是必须的; • in:表示入参; • out:表示返回值; • inout:表示即是入参又是返回值。 **调用存储过程** CALL 存储过程名 \[参数名

删除存储过程

DROP PROCEDURE 存储过程名;

存储过程与函数的区别

  1. 语法

关键字不同,存储过程是procedure;函数是function;

  1. 执行

存储过程可以独立执行,函数必须依赖表达式的调用;

  1. 返回值

存储过程可以定义多个返回结果;函数只有一个返回值;

  1. 功能

存储过程可以做业务逻辑,函数不易做复杂的业务逻辑
存储过程的缺陷

  1. 移植性

大多数关系型数据库的存储过程存在细微差异。兼容性极差

  1. 维护性

存储过程的维护成本高,修改调试较为麻烦

  1. 协作性

没有相关的版本控制或者IDE,团队中对于存储过程的使用大多是依赖文档

触发器

什么是触发器

一种存储过程,与表相关联,自动执行,而且是隐式执行

触发器是数据库中针对数据仓库操作出发的特殊的存储过程
触发器的操作
1. 查看所有的触发器

SELECT * FROM information_schema.`TRIGGERS`

WHERE trigger_schema = '库名'
2. 删除触发器

DROP TRIGGER 触发器名
创建触发器

CREATE

TRIGGER 数据库名.触发器名

BEFORE/AFTER -- 触发顺序

INSERT/UPDATE/DELETE -- 触发事件

ON 数据库.表名 -- 事件表

FOR EACH ROW

BEGIN

触发器内容 -- 事件出发后要写的语句

END$$
触发器的查看

查看所有的触发器:

SELECT * FROM information_schema.`TRIGGERS`

WHERE trigger_schema = '库名'
删除触发器:

DROP TRIGGER 触发器名

存储过程和触发器的区别

  1. 语法:

关键字不同,存储过程是procedure,触发器是trigger

  1. 执行:

存储过程需要调用才执行,触发器自动执行

  1. 返回值:

存储过程可以定义返回值,但是触发器没有返回值

  1. 功能:

存储过程是一组特定功能的SQL语句,触发器则是SQL语句后执行,本身不影响原功能

相关推荐
不剪发的Tony老师5 小时前
Shaper:一款免费开源的数据可视化工具
sql·数据可视化
IT邦德5 小时前
RPM包快速安装Oracle26ai
数据库·oracle
Dovis(誓平步青云)5 小时前
《滑动窗口算法:从 “暴力遍历” 到 “线性高效” 的思维跃迁》
运维·服务器·数据库·算法
mr_LuoWei20095 小时前
python工具:python代码知识库笔记
数据库·python
这周也會开心6 小时前
Redis数据类型的底层实现和数据持久化
数据库·redis·缓存
ん贤6 小时前
一次批量删除引发的死锁,最终我选择不加锁
数据库·安全·go·死锁
千寻技术帮6 小时前
10327_基于SpringBoot的视频剪辑咨询网站
mysql·源码·springboot·代码·视频咨询
数据知道6 小时前
PostgreSQL 核心原理:系统内部的对象寻址机制(OID 对象标识符)
数据库·postgresql
倔强的石头_6 小时前
关系数据库替换用金仓:数据迁移过程中的完整性与一致性风险
数据库
Elastic 中国社区官方博客6 小时前
使用 Groq 与 Elasticsearch 进行智能查询
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索