MySQL存储过程(PROCEDURE)(一)「建议收藏」

MySQL存储过程(PROCEDURE)(一)「建议收藏」一、定义与目的:定义:存储过程是数据库SQL语言层面的代码封装与重用(是数据库中存储复杂程序,以便外部程序调用的一种数据库对象);目的:我们为了完成特定功能的SQL语句集,经编译创建并保存在数

大家好,又见面了,我是你们的朋友全栈君。

一、定义与目的:

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

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

二、存储过程的特点:

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

三、创建存储过程:

 1 DELIMITER $$  -- 修改 分隔符为 &&
 2 
 3 CREATE
 4     /*[DEFINER = { user | CURRENT_USER }]*/  -- 定义谁有权限来执行、 DEFINER 表示按定义者拥有的权限来执行 、INVOKER 表示用调用者的权限来执行
 5     PROCEDURE `xx_database`.`p_test`()  -- 过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...] 过程体
 6     /*LANGUAGE SQL
 7     | [NOT] DETERMINISTIC
 8     | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
 9     | SQL SECURITY { DEFINER | INVOKER }
10     | COMMENT 'string'*/
11     BEGIN
12 
13     END$$
14 
15 DELIMITER ;

 四、参数:

  存储过程中存在三种参数:输入、输出、输入输出:

IN:参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

OUT:该值可在存储过程内部被改变,并可返回

INOUT:调用时指定,并且可被改变和返回

示例:

 1 -- IN 型参数:
 2 DELIMITER &&
 3     create procedure p_test(IN p_id int)
 4         begin
 5             select p_id;
 6             set p_id = 22;    -- 将 p_id 赋值为 22 
 7             select p_id;
 8         end&&
 9 DELIMITER ;
10 
11 -- OUT 型参数:
12 DELIMITER &&
13     create procedure p_test(OUT p_id int)
14         begin
15             select p_id;
16             set p_id = 22;    -- 将 p_id 赋值为 22 
17             select p_id;
18         end&&
19 DELIMITER ;
20 
21 -- INOUT 型参数:
22 DELIMITER &&
23     create procedure p_test(INTOUT p_id int)
24         begin
25             select p_id;
26             set p_id = 22;    -- 将 p_id 赋值为 22 
27             select p_id;
28         end&&
29 DELIMITER ;
30 
31 -- 调用 p_test()
32 set @P_id = 100;   -- @p_id 为用户变量,用户可以在后面的代码里引用它
33 call p_test(@p_id); -- 存储过程的调用 34 select @p_id;  -- IN型不会影响@p_id 的值,而OUT、INOUT会将@p_id的值改变,具体数值有过程体来定

五、变量的定义:

   1 DECLARE 变量名1[,变量名2…] 数据类型 [默认值]; 

  数值型:

  MySQL存储过程(PROCEDURE)(一)「建议收藏」

  日期、时间类型:

  MySQL存储过程(PROCEDURE)(一)「建议收藏」

  字符串类型:

  MySQL存储过程(PROCEDURE)(一)「建议收藏」

 六、存储过程的修改:

1 ALTER PROCEDURE sp_name 
2 [{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
3   | SQL SECURITY { DEFINER | INVOKER }
4   | 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 ;

  

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155326.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • spring中bean生命周期的初始化和销毁的几种方法详解

    spring中bean生命周期的初始化和销毁的几种方法详解

    2021年8月2日
    96
  • 2021 navicat激活码【2021.8最新】

    (2021 navicat激活码)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/ide…

    2022年3月27日
    154
  • mysql中explain的用法_mysql substr用法

    mysql中explain的用法_mysql substr用法基于Mysql5.7版本的explain参数详解…Mysql官网相关参数解读一:idSELECT标识符1.id越大越先执行2.相同id,从从往下执行二:select_type1.SIMPLE:最简单的查询(没有关联查询没有子查询没有union的查询语句)2:PRIMARY:子查询最外层的查询语句3.SUBQUERY:子查询内层查询语句4.DERIVED:派生表查询,FROM后的不是表而是查询后的结果集5.UNION:union或unionall中的第二个以后的查询表6.U

    2022年8月31日
    8
  • request对象的作用

    request对象的作用HttpServletRequset:请求报文     代表:浏览器请求时的请求报文,请求到达服务器服务器将报文解析封装为这个对象     获取:请求到服务器是,服务器直接创建然后传入到servlet方法中,最终传入到doget中     作用:获取请求报文中的所有数据              1、获取请求参数【input表…

    2022年5月29日
    44
  • 渗透测试技术_Nessus工具(二) _漏洞扫描工具 Nessus的使用教程

    渗透测试技术_Nessus工具(二) _漏洞扫描工具 Nessus的使用教程漏洞扫描工具Nessus的使用教程1、Nessus使用教程1.1、Nessus登录在浏览器中访问:https://{服务器IP}:8834例如访问:https://10.1.1.191:8834/输入你注册的账号密码进行登录,例如:nessus_casb/liaxx,进入主页面。1.2、新建1个主机扫描1.2.1、点击右上角的”NewScan”新建一个扫描1.2.2、选择“BasicNetworkScan”,进行配置项目名称,对项目的描述,以及最重要的目标I.

    2022年10月18日
    4
  • 打印机设置共享以及共享时无法连接,报错0X00000006解决方法[通俗易懂]

    打印机设置共享以及共享时无法连接,报错0X00000006解决方法[通俗易懂]取消禁用Guest用户,因为别人要访问安装打印机的按个电脑就是以guest账户访问的。 点击【开始】按钮,在【计算机】上右键,选择【管理】,如下图所示: 在弹出的【计算机管理】窗口中找到【Guest】用户 双击【Guest】,打开【Guest属性】窗口,确保【账户已禁用】选项没有被勾选 设置共享目标打印机:点击【开始】按钮,选择【设备和打印机】,如下图: 在…

    2022年5月14日
    617

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号