MySQL存储过程(PROCEDURE)(一)
一、定义与目的:
定义:存储过程是数据库 SQL 语言层面的代码封装与重用(是数据库中存储复杂程序,以便外部程序调用的一种数据库对象);
目的:我们为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行;
二、存储过程的特点:
- 存储过程可封装,并隐藏复杂的商业逻辑。
- 存储过程可以回传值,并可以接受参数。
- 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
- 存储过程可以用在数据检验,强制实行商业逻辑等。
三、创建存储过程:
DELIMITER $$ -- 修改 分隔符为 && CREATE
/*[DEFINER = { user | CURRENT_USER }]*/ -- 定义谁有权限来执行、 DEFINER 表示按定义者拥有的权限来执行 、INVOKER 表示用调用者的权限来执行
PROCEDURE `xx_database`.`p_test`() -- 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'*/
BEGIN END$$ DELIMITER ;
四、参数:
存储过程中存在三种参数:输入、输出、输入输出:
IN:参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT:该值可在存储过程内部被改变,并可返回
INOUT:调用时指定,并且可被改变和返回
示例:
-- IN 型参数:
DELIMITER &&
create procedure p_test(IN p_id int)
begin
select p_id;
set p_id = 22; -- 将 p_id 赋值为 22
select p_id;
end&&
DELIMITER ; -- OUT 型参数:
DELIMITER &&
create procedure p_test(OUT p_id int)
begin
select p_id;
set p_id = 22; -- 将 p_id 赋值为 22
select p_id;
end&&
DELIMITER ; -- INOUT 型参数:
DELIMITER &&
create procedure p_test(INTOUT p_id int)
begin
select p_id;
set p_id = 22; -- 将 p_id 赋值为 22
select p_id;
end&&
DELIMITER ; -- 调用 p_test()
set @P_id = 100; -- @p_id 为用户变量,用户可以在后面的代码里引用它
call p_test(@p_id); -- 存储过程的调用
select @p_id; -- IN型不会影响@p_id 的值,而OUT、INOUT会将@p_id的值改变,具体数值有过程体来定
五、变量的定义:
DECLARE 变量名1[,变量名2...] 数据类型 [默认值];
数值型:

日期、时间类型:

字符串类型:

六、存储过程的修改:
ALTER PROCEDURE sp_name
[{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string']
名词解释:
sp_name:参数表示存储过程或函数的名称;
characteristic:参数指定存储函数的特性。
CONTAINS SQL:表示子程序包含SQL语句,但不包含读或写数据的语句;
NO SQL:表示子程序中不包含SQL语句;
READS SQL DATA:表示子程序中包含读数据的语句;
MODIFIES SQL DATA:表示子程序中包含写数据的语句。
SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行,DEFINER:表示只有定义者自己才能够执行;INVOKER:表示调用者可以执行。
COMMENT 'string':是注释信息。
示例:
ALTER PROCEDURE CountProc
MODIFIES SQL DATA
SQL SECURITY INVOKER ;
MySQL存储过程(PROCEDURE)(一)的更多相关文章
- mysql存储过程(procedure)
#创建带参数的存储过程 delimiter // ),out p int) begin ; end // delimiter call pro_stu_name_pass(@n,@p); select ...
- mysql存储过程procedure
传送门 http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html ) ); DROP PROCEDURE IF EXISTS ju ...
- MySql 存储过程总结
MySql 存储过程 -- ---------------------------- -- Procedure structure for `proc_adder` -- -------------- ...
- MySQL存储过程(转)
一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...
- MySql存储过程
MySQL 存储过程 ```sql CREATE PROCEDURE myprocedure (IN para01 INTEGER) BEGIN DECLARE var01 CHAR(10); IF ...
- mysql存储过程和存储函数
mysql存储过程和存储函数 存数函数代码示例: DROP PROCEDURE IF EXISTS calc_ci_day_suc_rate; delimiter // CREATE FUNCTION ...
- mysql存储过程编写-入门案例-遁地龙卷风
(-1)写在前面 这篇文章只是简要的叙述了mysql存储过程编写的基本概念. 我使用的mysql版本是5.7.9-log. 参照<<深入浅出MySQL>>. (0) delim ...
- MySQL 存储过程
MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...
- mysql存储过程详解
mysql存储过程详解 1. 存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...
- mysql存储过程学习
一.存储过程的创建 语法: CREATE PROCEDURE sp_name (参数)合法的SQL语句 mysql> delimiter // mysql> CREATE PROCEDUR ...
随机推荐
- Shodan的http.favicon.hash语法详解与使用技巧
在Shodan搜索中有一个关于网站icon图标的搜索语法,http.favicon.hash,我们可以使用这个语法来搜索出使用了同一icon图标的网站,不知道怎么用的朋友请参考我上一篇文章. 通过上一 ...
- 接入HTTPS协议的CAS登录配置
1.在CAS服务器创建tomcat.keystore(记住keystone创建时输入的密码) keytool -genkeypair -alias "tomcat" -keyalg ...
- nginx 详细配置
Nginx全局变量 Nginx中有很多的全局变量,可以通过$变量名来使用.下面列举一些常用的全局变量: 变量 说明 boxClass 需要执行动画的元素的 变量 说明 $args 请求中的参数,如ww ...
- 【C++】GSL(GNU Scientific Library) 的安装及在 Visual Studio 2017 中的使用
GSL 是 GNU 开发并维护的科学计算的库,其中包括: 复数 多项式的根 特殊函数 向量和矩阵 排列 排序 BLAS支持 线性代数 Eigensystems 快速傅立叶变换 正交 随机数 准随机序列 ...
- jira,Confluence 的JVM内存优化
个人喜好,可能不是很适合大众 JIRA 修改setenv.sh,调整JVM为4096m [root@jira_confluence ~]# cd /app/atlassian/jira/bin/ [r ...
- 小计:Shopee批量删除修复~附脚本
需求 昨天浪的时候,无意之间看到文职人员在一个个删除违禁商品,大概23个店铺,每个店铺500多个商品,页面是用Ajax异步加载的,每删一个就需要等几秒,粗略估计一下用时:9h左右 然后了解了下是什么情 ...
- Spring data jpa 调用存储过程处理返回参数及结果集
一.环境 1.此随笔内容基于spring boot整合的spring data jpa项目, 2.数据库为mysql 5.7.9版本 二.内容 1. 新建存储过程 pro_query_object B ...
- 深入理解Java设计模式之观察者模式
前言 观察者,即时observer,总结来说就是一个当一个被观察的对象的状态发生变化时,会通知相应的观察者对象. 观察者模式定义了四种角色:抽象主题.具体主题.抽象观察者.具体观察者 1.抽象主题 ...
- 一段充满bug的R程序,慎入 ...
twitter的AnomalyDetection 官网效果图如下: 尝试写了下面这个R程序: get_specify_df <- function(start_ts,stop_ts,categ ...
- Koa与Node.js开发实战(3)——Nunjucks模板在Koa中的应用(视频演示)
技术架构: 在Koa中应用Nunjucks,需要先把Nunjucks集成为符合Koa规格的中间件(Middleware),从本质上来讲,集成后的中间件的作用是给上下文对象绑定一个render(vi ...