mysql 存储程序
①什么是存储程序
存储程序原理: 将程序像数据一样存储到计算机内部存储器中的一种设计原理
解释: 存储程序是一种批处理的形式, 本质上封装了一些可执行的SQL语句和一些特殊的控制结构,
然后给用户提供一种简单的调用方式来执行这些语句
②存储程序分类
存放在MySQL服务器端,供重复调用的对象叫做存储程序, 分为以下四种:
-
存储过程
封装很多 SQL 语句完成某种特定功能, 以便外部程序调用的一种数据库对象
优点: 存储过程可以封装,隐藏复杂代码逻辑; 缺点: 通常定制化于特定的数据库上,切换数据库时需要修改; ------------------------------------------------------------------------- 创建: CREATE PROCEDURE 存储过程名称( 参数的种类1 参数1 数据类型1 [,参数的种类2 参数2 数据类型2]) BEGIN 处理内容 END 执行: CALL 存储过程名称(参数,....) 删除: DROP PROCEDURE [IF EXISTS] 存储过程名称; 查看: SHOW PROCEDURE STATUS SHOW CREATE PROCEDURE 存储过程名;
-
存储函数
相当于自定义 MySQL 函数
创建: CREATE FUNCTION 函数名([参数类型 数据类型[,….]]) RETURNS 返回类型 BEGIN SQL语句..... RETURN (返回的数据) END 删除: DROP FUNCTION [IF EXISTS] 函数名; 调用: select 函数名(参数);
-
触发器
当与表相关联的事件发生时,就会执行或触发SQL触发器,例如插入,更新或删除
trigger_time: { BEFORE | AFTER } 触发时间 trigger_event: { INSERT | UPDATE | DELETE } 触发事件 当自定义事件触发时,自动执行 创建: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW 对于行锁定,行级操作触发 BEGIN 触发器触发后所要执行的操作 END 查看: SHOW TRIGGERS [FROM schema_name]; 删除: DROP TRIGGER 触发器名称
-
事件
根据时间表在预定时间自己执行
比如,可以自己定一个开始时间点,然后让它每隔指定的时间段重复做某些事情
② 存储过程与存储函数区别
大佬总结的就是清楚 https://www.cnblogs.com/youxin/p/3568379.html
整理如下:
存储过程 | 存储函数 |
---|---|
实现功能复杂 | 实现功能针对性强 |
可执行数据库操作(修改表等一系列操作) | 不能执行修改全局数据库状态操作 |
可以返回参数,如记录集 | 只能返回值或者表对象 |
可以返回多个变量 | 只能返回一个变量 |
参数类型包括: IN OUT INOUT 三种 | 参数类型只有 IN 类型 |
声明时不需要返回类型 | 声明需要返回类型, 且函数体必须包含return语句 |
可以使用非确定函数 | 不可以使用非确定函数 |
作为独立部分来执行, call调用 | 作为查询语句的一部分来调用, select调用 |
SQL语句中不可以使用 | 函数可以返回一个表对象, 可以放在from关键字后面 |
追加:
确定函数与非确定函数
定义: http://www.cftea.com/c/2007/08/H8C9JLYQLFSGVB6B.asp
能力有限, 看不太懂
自己理解:
select sysdate( ) 获取当前系统时间,每次调用返回值不同,这类就是非确定函数
而确定性函数用关键词Deterministic标识,并且函数的返回值完全由输入参数决定,
例如:对固定的数据进行求和操作,返回的值是不会变的,这类就是确定函数