MySQL的存储过程,没错,看起来好生僻的使用场景。问题源于一个开发同学提交了权限申请的工单,需要开通一些权限。...比如部署安装,比如权限开通。数据库的权限开通就是一个相对典型的案例,而存储过程的权限开通甚至都有点让人怀疑人生了。...所以沟通了一圈发现,开通的权限就可以迅速裁剪,对他们而言,修改存储过程的逻辑也是需要的,因为在一些特定的场景下,他们对逻辑的控制希望能够更加灵活。 好了,基础的背景介绍完了。...赋予基本的表的权限,赋予存储过程的权限,存储过程的这个地方需要注意一个重要的点是SQL SECURITY,默认创建是definer,如果需要开放给其他的用户调用,则建议是设置为invoker....因为我们没有select procedure或者view procedure的权限,所以我们几乎再无从干预了。 使用命令行的方式能够复现出这个问题: ? 没有存储过程的实质性内容。
什么是存储过程 存储过程就是事先经过编译并存储在数据库中的一段 SQL 语句的集合; 为什么使用存储过程 调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的...SQL语句 END ; 一个简单的案例 CREATE PROCEDURE p1() BEGIN SELECT count(*) FROM account; END; 2、调用存储过程 CALL 名称...([ 参数 ]); 调用上面的存储过程 call p1(); 3、查看存储过程 SHOW CREATE PROCEDURE 存储过程名称 ; -- 查询某个存储过程的定义 4、删除存储过程 DROP...delimiter 指定SQL语句的结束符 存储过程中的变量 在MySQL中,变量一般可分为分为三种类型: 系统变量、用户定义变量、局部变量; 一、系统变量 系统变量是MySQL服务器系统自身提供的...循环语句在编程中经常被用到,常用于对批量的数据进行循环处理,在mysql的存储过程中,也提供了几种常用的循环语句,包括:while循环,repeat循环,和loop循环; 1、while循环语句 while
(不仅仅是某个某个存储过程,或某个数据库的存储过程的定义), 这里就涉及一个权限放大的问题。...例如,我本来打算只授予用户A查看存储过程PRC_A的定义权限,但是那样授权后,A能查看很多存储过程的定义,甚至还能查看一些没有访问权限数据库的存储过程的权限。...MySQL 8.0开始,存储过程存储在mysql.routines和mysql.parameters系统表中,但是这些表无法直接访问,只能访问INFORMATION_SCHEMA.ROUTINES。...个人测试发现,授予alter routine后,就能查看存储过程的定义,但是这个授权也带来一个问题,授予权限的用户不仅可以查看存储过程定义,而且可以删除这个存储过程(这个也是一个问题)。...sec) mysql> 总结: 在MySQL5.7或之前版本,可以通过授予用户查询mysql.proc来间接实现查看存储过程定义的权限,在MySQL 8.0 可以通过授予用ALTER ROUTINE的权限来间接实现查看存储过程定义的权限
创建表 CREATE TABLE test(endtime DATETIME); 创建存储过程test CREATE PROCEDURE test () BEGIN update examinfo SET...test(); 每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去....实战mysql存储程序与定时器 存储过程定时器eventprocedure实战 需求:一个庞大的日志表,现每天做定时统计一天的总数,放另一个表中,方便查看,运营。...本文重点,用mysql定时器定时执行存储程序。...定时器 如果不是on,就执行 Sql代码 set global event_scheduler=1; 不需要重启mysql 会发现mysql多起了一个daemon进程 (注: 对于我们线上环境来说,使用
MySQL 存储过程(了解) 1 什么是存储过程 MySQL 5.0 版本开始支持存储过程 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据 库对象。...,数据库交互更加快捷(应用服务器,与 数据库服务器不在同一个地区) 缺点: 在互联网行业中,大量使用MySQL,MySQL的存储过程与Oracle的相比较弱,所以较少使用,并且互联网行业需求变化较快也是原因之一...goods; END $$ 3) 调用存储过程 语法格式 call 存储过程名 -- 调用存储过程 查询goods表所有数据 call goods_proc; 方式2 1) IN 输入参数:表示调用者向存储过程传入值...# 删除 id为2的商品 CALL goods_proc02(2) 方式3 1) 变量赋值 SET @变量名=值 2) OUT 输出参数:表示存储过程向调用者传出值 OUT 变量名 数据类型 3) 创建存储过程...# 调用存储过程插入数据,获取返回值 CALL orders_proc(1,2,30,@out_num); 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/155035
1、添加存储过程 DELIMITER // CREATE PROCEDURE AddLLdata( in L_Longitude double , in L_Latitude double, IN...,L_Latitude,L_Elevation,L_LaserHeight,L_FollowHeight,L_PlaneId,L_FlyDate); END // DELIMITER ; 2、查询存储过程...from chkdata; END 3、查询两个时间之差 select UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP('2018-04-23 14:18:12'); 4、添加存储过程...DATETIME ) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN /*定义一个变量存储是否存在的值...DATETIME ) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN /*定义一个变量存储是否存在的值
`user1234`('张三') 1.DROP PROCEDURE IF EXISTS 【存储过程名】 (如果存储过程存在删除后创建!...如果不写只能执行一次) 2.DELIMITER // (将每句结束符号;换成//) 3.CREATE PROCEDURE `存储过程名`(参数) (创建一个存储过程(参数列表【IN 输入参数【out...(表示存储过程对同样的输入参数产生相同的结果【表示会产生不确定的结果(默认)。】)...如果想通过访问者来判断是否具有访问该PROCEDURE 的权限,则可用SQL SECURITY指定。...) 7.COMMENT ‘’ (对存储过程描述类似于java) 8.BEGIN 方法体开始 ... 写sql语句 END//方法体结束 9. call XX (调用存储过程XX为存储名)
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数...存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升 一、存储过程概述 1.1、什么是存储过程 存储过程是数据库中的一个重要对象。...存储过程是在数据库系统中,一组为了完成特定功能的SQL 语句集。存储过程是存储在数据库中,一次编译后,到处运行。不需要再次编译,用户通过指定存储过程的名字并传递参数(如果该存储过程带有参数)来执行。...存储过程可以被重复使用。 存储过程只连接一次数据库,sql语句在访问多张表时,连接多次数据库。 存储的程序是安全的。存储过程的应用程序授予适当的权限。...status like '%emp%'; 7.2、存储过程删除 格式: drop procedure 存储过程名; 案例: mysql> drop procedure emp_id; Query OK
2、简化操作 1-2、语法: CREATE PROCEDURE 存储过程名(参数列表) BEGIN 存储过程体(一组合法的SQL语句) END 注意: 1、参数列表包含三部分 参数模式 参数名...,begin end可以省略 存储过程体中的每条sql语句的结尾要求必须加分号。...存储过程的结尾可以使用 delimiter 重新设置 语法: delimiter 结束标记 案例: delimiter $ 二、存储过程创建和使用语法 2-1、语法 CALL 存储过程名(实参列表);...myp1()$ 2-2-2、in模式参数存储过程案例 #案例1:创建存储过程实现 根据女神名,查询对应的男神信息 DELIMITER $ CREATE PROCEDURE myp2(IN beautyName...p2,p3 四、查看存储过程的信息 语法:show create procedure 存储过程名 SHOW CREATE PROCEDURE p1; #错误演示 DESC p1; 存储过程案例
call [procedureName]([para1],[para2],...); 阅读上面的代码需要注意如下几个问题。...(2)DELIMITER $用于改变MySQL的分隔符,否则MySQL在回车的情况下会按照默认分割符分号;将存储过程拆分,使其执行失败。...image.png (5)还有一个很苛刻的地方就是,MySQL的存储过程不能写在同一行。...这种变量要在变量名称前面加上“@”符号,这个变量可以在被调用的存储过程或者代码之间共享数据,有点像CC++中的局部static变量。具体例子可参考: MySQL存储过程——变量。...IF EXISTS [procedureName]; ---- 参考文献 [1]MySql中创建存储过程 [2]MySQL存储过程详解 [3]mysql存储过程中 传递表名作参数怎么整
存储过程调用 语法: call 存储过程名称(实参列表); 注意:实参列表中包含有输出类型的参数 代码实例: call pro_insert(); 当调用这个存储过程,会把创建成功的创建过程中的语句执行一遍...;$ #调用存储过程 call pro_insert(); 创建带有in模式参数的存储过程 代码实例: 用于向b_user表中插入2条数据,性别由客户输入 #创建存储过程 delimiter $ create...into b_user(name,sex) values('存储过程b',sex); end;$ #调用存储过程 call pro_insert2('男'); 注意:值列表中写字段名称意为让用户来赋值...call pro_insert3('uname','男'); 带in,out参数的存储过程 判断用户登录,如果用户名和密码输入正确登录成功,否则登录失败。...存储过程名称; 查看存储过程 语法: show create procedure 存储过程名称; 修改存储过程 目前,MySQL还不提供对已存在的存储过程的代码修改。
注意:每执行一句sql语句,就会连接mysql服务器一次。 3)“存储过程的含义”:一组预先编译好的sQL语句的集合。...3)delimiter定义存储过程的结束标记 在mysql语句中,由于每一个语句后面必须要;结尾,而存储过程也需要一个符号结尾,为了防止混淆,我们需要在创建存储过程之前,先使用delimiter定义一个存储过程的结束标记...delimiter $ 4)存储过程的调用 call 存储过程名(实参列表); 3、空参的存储过程 注意:“存储过程的整个执行过程,最好在CMD窗口中执行” -- 创建一个存储过程 delimiter...call myp3('john','8888'); 效果如下: 5、带out模式的存储过程 1)案例一:创建一个存储过程,根据女神名,返回对应的男神名。...set @m=10$ set @n=20$ call myp6(@m,@n)$ select @m,@n$ 效果如下: 7、存储过程的案例解析 创建存储过程或函效,实现传入用户名和密码,插入到admin
(5).作为一种安全机制来充分利用:通过对执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。...MySQL的存储过程 存储过程是数据库的一个重要的功能,MySQL 5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。...MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT: IN参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值 OUT:该值可在存储过程内部被改变...注释 MySQL存储过程可使用两种风格的注释: 双杠:--,该风格一般用于单行注释 C风格: 一般用于多行注释 MySQL存储过程的调用 用call和你过程名以及一个括号,括号里面根据需要,加入参数...数据库.存储过程名; MySQL存储过程的修改 ALTER PROCEDURE 更改用CREATE PROCEDURE 建立的预先指定的存储过程,其不会影响相关存储过程或存储功能。
文章目录 创建/调用存储过程 存储过程体 为语句块贴标签 参数列表 存储过程的优缺点 存储过程的优点 存储过程的缺点 存储过程和函数可以理解为一段sql的集合,他们被事先编译好并且存储在数据库中。...set @p_in=1; mysql> call in_param(@p_in); +------+ | p_in | +------+ | 1 | +------+ +------+ |...> set @p_out=1; mysql> call out_param(@p_out); +-------+ | p_out | +-------+ | NULL | +-------+ #...sql语句的开销要小的多 3.第三点就是提高系统安全性,因为存储过程可以使用权限控制,而且参数化的存储过程可以有效的放置slq注入攻击,保证了其安全性 4.第四点就是耦合性降低,当我们表结构发生变化之后...对于小型的web应用来说,如果我们使用语句缓存,发现编译sql的开销并不大,但是使用在存储过程缺需要检查权限一类的开销,这些赘余功能也会在一定程度上拖累性能
1.1 简介 1.1.1 概述 MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。...> call test1(@a,@b); Query OK, 1 row affected (0.06 sec) mysql> select @a,@b; +----+----+ | @a | @b...1.2.3 调用存储过程 ☞ 语法 call 存储过程名称(参数列表); ☞ 示例 mysql> call showtest; +----+-------+ | id | money | +----+-...> call instest(3, '1000'); Query OK, 1 row affected (0.07 sec) mysql> call showtest; +------+-------...调用时用 call,一般用于执行比较复杂的的过程体、更新、创建等语句。
作用是确定存储过程在执行时所具有的执行者的权限和权限级别。存储过程在执行时将使用 DEFINER 指定的用户的权限来执行,而不是调用存储过程的用户的权限。这可以用于实现数据库的安全性和隔离。...这些属性仅供 MySQL 服务器参考使用,不会用于限制程序中实际使用的语句。 SQL SECURITY 表示存储过程以定义者(DEFINER )权限还是调用者(INVOKER)权限执行。...4.调用存储过程 使用 CALL 语句可以调用存储过程。 CALL sp_name([parameter[,...]])...CALL sp_name[()] 比如调用前文创建的查询国家/地区城市数量的存储过程,查询日本的城市数量。...mysql> CALL citycount('JPN', @cities); -- cities in Japan Query OK, 1 row affected (0.00 sec) mysql>
文章目录 为什么使用存储过程 书写基本格式 关于参数 存储过程中开启事务 返回多个结果集 设置变量 存储过程:一段SQL语句的集合 为什么使用存储过程 1、解耦合。...可能一项业务,需要先插入、再修改、再删除、再查询返回结果,本来四条命令,谁来写先不说,这四条命令哪条单拎出来不比一条存储过程调用命令长。 3、执行速度快。...但是存储过程只需要一次编译,多次运行。 4、提高系统安全性。存储过程可以使用权限控制,而且参数化的存储过程可以有效防止注入攻击,保证了其安全性。 5、重用性强。一次编写,随处调用。...书写基本格式 create procedure 存储过程名(参数列表) begin 存储过程体 end 示例: delimiter $ #将语句的结束符号从分号;临时改为$(可以是自定义) create...money) values(pwd_,phone_num_,0); select max(id_) from User; end$ delimiter ; #将语句的结束符号恢复为分号 调用的时候就: call
CONCAT(person_no,"号犯人住", i , "号床位"); ---字符串拼接 存储过程的创建标准 DELIMITER $$ -- 定义语句结束符 为$$ DROP PROCEDURE IF...的存储过程中经常会看到这句话:DECLARE countinue handler for NOT FOUND。...SQL SECURITY DEFINER:表示执行存储过程中的程序是由创建该存储过程的用户的权限来执行。...SQL SECURITY INVOKER:表示执行存储过程中的程序是由调用该存储过程的用户的权限来执行。...存储方法 存储方法与存储过程的区别 1,存储方法的参数列表只允许IN类型的参数,而且没必要也不允许指定IN关键字 2,存储方法返回一个单一的值,值的类型在存储方法的头部定义 3,存储方法可以在SQL语句内部调用
2 你可能没有创建存储过程的安全访问权限。...许多数据库管理员限制存储过程的创建,允许用户使用存储过程,但不允许创建存储过程 存储过程是非常有用的,应该尽可能的使用它们 执行存储过程 MySQL称存储过程的执行为调用...,因此MySQL执行存储过程的语句为CALL .CALL接受存储过程的名字以及需要传递给它的任意参数 CALL productpricing(@pricelow ,...因为这段代码时创建而不是使用存储过程。 Mysql命令行客户机的分隔符 默认的MySQL语句分隔符为分号 ; 。Mysql命令行实用程序也是 ; 作为语句分隔符。...CALL productpricing(@pricelow , @pricehigh , @priceaverage); 这条CALL语句给出3个参数,它们是存储过程将保存结果的3个变量的名字
基础入门 本文基于mysql5.7以上版本 创建存储过程的语句为CREATE PROCEDURE,创建存储函数的语句为CREATE FUNCTION。调用存储过程的语句为CALL。...调用存储函数的形式就像调用MySQL内部函数一样。...对于存储过程提供的临时变量而言,MySQL规定要加上@开头。...DELIMITER ; --存储过程分隔符设定为; -- 调用存储过程 CALL CountStu('男',@num); SELECT @num; -- 本质为执行下面的SQL: SELECT...MySQL游标是敏感的。 您可以在存储过程,存储函数和触发器中使用MySQL游标。
领取专属 10元无门槛券
手把手带您无忧上云