一、定义与目的:

  定义:存储过程是数据库 SQL 语言层面的代码封装与重用(是数据库中存储复杂程序,以便外部程序调用的一种数据库对象);

  目的:我们为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行;

二、存储过程的特点:

  1. 存储过程可封装,并隐藏复杂的商业逻辑。
  2. 存储过程可以回传值,并可以接受参数。
  3. 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
  4. 存储过程可以用在数据检验,强制实行商业逻辑等。

三、创建存储过程:

 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)(一)的更多相关文章

  1. mysql存储过程(procedure)

    #创建带参数的存储过程 delimiter // ),out p int) begin ; end // delimiter call pro_stu_name_pass(@n,@p); select ...

  2. mysql存储过程procedure

    传送门 http://www.blogjava.net/sxyx2008/archive/2009/11/24/303497.html ) ); DROP PROCEDURE IF EXISTS ju ...

  3. MySql 存储过程总结

    MySql 存储过程 -- ---------------------------- -- Procedure structure for `proc_adder` -- -------------- ...

  4. MySQL存储过程(转)

    一.MySQL 创建存储过程 "pr_add" 是个简单的 MySQL 存储过程,这个存储过程有两个 int 类型的输入参数 "a"."b" ...

  5. MySql存储过程

    MySQL 存储过程 ```sql CREATE PROCEDURE myprocedure (IN para01 INTEGER) BEGIN DECLARE var01 CHAR(10); IF ...

  6. mysql存储过程和存储函数

    mysql存储过程和存储函数 存数函数代码示例: DROP PROCEDURE IF EXISTS calc_ci_day_suc_rate; delimiter // CREATE FUNCTION ...

  7. mysql存储过程编写-入门案例-遁地龙卷风

    (-1)写在前面 这篇文章只是简要的叙述了mysql存储过程编写的基本概念. 我使用的mysql版本是5.7.9-log. 参照<<深入浅出MySQL>>. (0) delim ...

  8. MySQL 存储过程

    MySQL 存储过程 存储过程是通过给定的语法格式编写自定义的数据库API,类似于给数据库编写可执行函数. 简介 存储过程是一组为了完成特定功能的SQL语句集合,是经过编译后存储在数据库中. 存储过程 ...

  9. mysql存储过程详解

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  10. mysql存储过程学习

    一.存储过程的创建 语法: CREATE PROCEDURE sp_name (参数)合法的SQL语句 mysql> delimiter // mysql> CREATE PROCEDUR ...

随机推荐

  1. Shodan的http.favicon.hash语法详解与使用技巧

    在Shodan搜索中有一个关于网站icon图标的搜索语法,http.favicon.hash,我们可以使用这个语法来搜索出使用了同一icon图标的网站,不知道怎么用的朋友请参考我上一篇文章. 通过上一 ...

  2. 接入HTTPS协议的CAS登录配置

    1.在CAS服务器创建tomcat.keystore(记住keystone创建时输入的密码) keytool -genkeypair -alias "tomcat" -keyalg ...

  3. nginx 详细配置

    Nginx全局变量 Nginx中有很多的全局变量,可以通过$变量名来使用.下面列举一些常用的全局变量: 变量 说明 boxClass 需要执行动画的元素的 变量 说明 $args 请求中的参数,如ww ...

  4. 【C++】GSL(GNU Scientific Library) 的安装及在 Visual Studio 2017 中的使用

    GSL 是 GNU 开发并维护的科学计算的库,其中包括: 复数 多项式的根 特殊函数 向量和矩阵 排列 排序 BLAS支持 线性代数 Eigensystems 快速傅立叶变换 正交 随机数 准随机序列 ...

  5. jira,Confluence 的JVM内存优化

    个人喜好,可能不是很适合大众 JIRA 修改setenv.sh,调整JVM为4096m [root@jira_confluence ~]# cd /app/atlassian/jira/bin/ [r ...

  6. 小计:Shopee批量删除修复~附脚本

    需求 昨天浪的时候,无意之间看到文职人员在一个个删除违禁商品,大概23个店铺,每个店铺500多个商品,页面是用Ajax异步加载的,每删一个就需要等几秒,粗略估计一下用时:9h左右 然后了解了下是什么情 ...

  7. Spring data jpa 调用存储过程处理返回参数及结果集

    一.环境 1.此随笔内容基于spring boot整合的spring data jpa项目, 2.数据库为mysql 5.7.9版本 二.内容 1. 新建存储过程 pro_query_object B ...

  8. 深入理解Java设计模式之观察者模式

    前言 观察者,即时observer,总结来说就是一个当一个被观察的对象的状态发生变化时,会通知相应的观察者对象.   观察者模式定义了四种角色:抽象主题.具体主题.抽象观察者.具体观察者 1.抽象主题 ...

  9. 一段充满bug的R程序,慎入 ...

    twitter的AnomalyDetection  官网效果图如下: 尝试写了下面这个R程序: get_specify_df <- function(start_ts,stop_ts,categ ...

  10. Koa与Node.js开发实战(3)——Nunjucks模板在Koa中的应用(视频演示)

    技术架构: ​ 在Koa中应用Nunjucks,需要先把Nunjucks集成为符合Koa规格的中间件(Middleware),从本质上来讲,集成后的中间件的作用是给上下文对象绑定一个render(vi ...