跟踪了半小时,发现是数据库的数据出错了,玩家下线保存角色数据的时候,居然将数据库内所有角色的数据都改了,然后赶紧去看存储过程,但是看不出存储过程的错误。...先贴一下存储过程的实现: CREATE DEFINER=`root`@`%` PROCEDURE `sp_UpdatePlayer`(out returnvalue long, out returndesc...,始终找不到问题的关键,后来突然想到一个问题,是不是参数命名问题,改了一些参数命名,某一次突然正确了,经过比较发现,原来where后面作为条件的变量名不能和字段名相同,而且这里是不区分大小写的。...但是作为update和insert into的参数确是可以的,mysql真的很坑爹呀。...修改后的存储过程如下: CREATE DEFINER=`root`@`%` PROCEDURE `sp_UpdatePlayer`(out returnvalue long, out returndesc
什么是存储过程 存储过程就是事先经过编译并存储在数据库中的一段 SQL 语句的集合; 为什么使用存储过程 调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的...delimiter 指定SQL语句的结束符 存储过程中的变量 在MySQL中,变量一般可分为分为三种类型: 系统变量、用户定义变量、局部变量; 一、系统变量 系统变量是MySQL服务器系统自身提供的...注意点: mysql服务重新启动之后,所设置的全局参数会失效,要想不失效,可以在 /etc/my.cnf 中配置; 全局变量(GLOBAL): 全局变量针对于所有的会话; 会话变量(SESSION):...可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN … END块。...first_name = emp_name; END ; 执行调用 六、存储过程中的循环使用 循环语句在编程中经常被用到,常用于对批量的数据进行循环处理,在mysql的存储过程中,也提供了几种常用的循环语句
一个参数的方法 方式 1 DECLARE cnt INT DEFAULT 0; select count(*) into cnt from test_tbl; select cnt; 方式 2 set...count(*) from test_tbl); select @cnt; 方式 3 select count(*) into @cnt1 from test_tbl; select @cnt1; 多个列的情况下似乎只能用
变量声明 服务器系统变量 通过@@来调用系统变量 # 列出mysql所有系统变量 SHOW VARIABLES SELECT @@date_format 用户变量 通过@来调用用户变量 # 输出变量yesterday...15, 3)); SELECT @amount 局部变量 不需要@前缀 需要事先进行变量类型的声明和初始化 存储过程 简单地认为是SQL中的函数 声明一个存储过程 创建存储过程 每一句语句结束之后都要添加分号...as 总业绩, MAX(amount) as 最大业绩, MIN(amount) as 最小业绩, department as 部门 FROM store_perf WHERE...sta_date=t_date GROUP BY department; END 调用存储过程 CALL stat_store_perf(1) 删除存储过程 DROP PROCEDURE...stat_store_perf 触发器 和存储过程一样, 都是嵌入到mysql中的一段程序, 区别就是存储过程需要显式调用, 而触发器式根据对表的相关操作自动激活执行.
本文链接:https://blog.csdn.net/luo4105/article/details/51501245 定义变量,三种方式 a.DECLARE 这种方式定义的变量,语句的位置必须在begin...语句 begin DECLARE tname VARCHAR(50); 赋值 set tname =‘XXX’; b.set 这种方式定义的变量,定义同时赋值,语句的位置可以任意出现,不需要带上参数类型...,但定义的变量是会话变量,如果想定义局部变量,那么变量名加上'@'。...XXX'; c.select 性质同上一个set,但是这个可以通过插询记录去赋值 语句 select @var=cnm FROM tbnm; set和select其实可以相互转化,下面两句是相同的
存储过程优缺点 2.1、Mysql存储过程优点 存储过程可封装,并隐藏复杂的商业逻辑。 ...3.3、调用存储过程: 解析:在存储过程中设置了需要传参的变量p_playerno,调用存储过程的时候,通过传参将57赋值给p_playerno,然后进行存储过程里的SQL操作。...,接受了输入的参数,也输出参数,改变了变量 5、存储过程声明变量 1)、用户变量名一般以@开头。 ...where routine_schema='数据库名'; 5 6 或者 7 show procedure status where db='数据库名'; 如果我们想知道,某个存储过程的详细,那我们又该怎么做呢...8、MySQL存储过程的控制语句 8.1、变量作用域 内部的变量在其作用域范围内享有更高的优先权,当执行到 end。
前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎!...本章主要内容面向接触过C++的老铁 主要内容含: 一.系统变量-【全局变量,会话变量】 1.系统变量的分类 注意:提到变量,默认是会话变量(session) 2.系统变量的[默认问题]和[重启后重置问题...=0; insert into course(id,name)VALUES(5,'0racle'); commit; 设置后系统变量 二.用户定义变量 1.用户定义变量的介绍 2.用户定义变量无需...【声明/初始化】,默认值为NULL 3.用户定义变量的[赋值和使用]操作 赋值:推荐用 = 常用:INTO操作 演示: 三.局部变量 1.局部变量的介绍 2.局部变量的[声明和赋值]...操作 常用:INTO操作 建一个存储过程,局部变量stu_count存储表中记录数 -声明-declare -赋值- create procedure p2() 创建一个存储过程,局部变量
目录 什么是存储过程 有哪些特性 入门案例 MySQL操作-变量定义 存储过程传参-in 存储过程传参-out 存储过程传参-inout 存储过程传参-in,out, inout 什么是存储过程 MySQL...会话变量在每次建立一个新的连接的时 候,由MYSQL来初始化。MYSQL会将当前所有全局变量的值复制一份。来做为会话变量。...= 50000 ; 存储过程传参-in in 表示传入的参数, 可以传入数值或者变量,即使传入变量,并不会更改变量的值,可以内部更 改,仅仅作用在函数范围内。...存储过程传参-out out 表示从存储过程内部传值给调用者 -- ---------传出参数:out--------------------------------- use mysql7_procedure...-in,out, inout in 输入参数,意思说你的参数要传到存过过程的过程里面去,在存储过程中修改该参数的值不能被 返回 out 输出参数:该值可在存储过程内部被改变,并向外输出 inout 输入输出参数
mysql存储过程设置: delimiter // #将mysql的结束符设置为// create procedure name(IN | OUT |INOUT str STRING) #定义存储过程名字...begin #开始存储过程 select * from tables; #执行过程 end // #结束存储过程 delimiter ; #将mysql的结束符设置为; call name(); #存储过程调用...drop procedure if exists name #存储过程删除 mysql储存函数设置: delimiter // #将mysql的结束符设置为// create function name...// #将mysql的结束符设置为// CREATE PROCEDURE add_id(out num INT) #定义存储过程名字 BEGIN #开始存储过程 DECLARE itmp INT; #...; #流程控制 CLOSE cur_id; #关闭光标 END // #结束存储过程 DELIMITER ; #将mysql的结束符设置为; call add_id(@num); #存储过程调用 select
不带参数的存储过程 -- 查询学生个数 drop procedure if exists select_students_count; delimiter ;; -- 替换分隔符 create...带有输出参数的存储过程 MySQL 支持 in (传递给存储过程),out (从存储过程传出) 和 inout (对存储过程传入和传出) 类型的参数。...存储过程的代码位于 begin 和 end 语句内,它们是一系列 select 语句,用来检索值,然后保存到相应的变量 (通过 into 关键字) -- 根据姓名查询学生信息,返回学生的城市 delimiter...begin select * from students where name like _likename; end ;; delimiter ; 执行存储过程: call...查询存储过程 查询所有的存储过程: select name from mysql.proc where db='数据库名'; ?
MySQL的存储过程,没错,看起来好生僻的使用场景。问题源于一个开发同学提交了权限申请的工单,需要开通一些权限。...数据库的权限开通就是一个相对典型的案例,而存储过程的权限开通甚至都有点让人怀疑人生了。...所以沟通了一圈发现,开通的权限就可以迅速裁剪,对他们而言,修改存储过程的逻辑也是需要的,因为在一些特定的场景下,他们对逻辑的控制希望能够更加灵活。 好了,基础的背景介绍完了。...赋予基本的表的权限,赋予存储过程的权限,存储过程的这个地方需要注意一个重要的点是SQL SECURITY,默认创建是definer,如果需要开放给其他的用户调用,则建议是设置为invoker....打开的时候,竟然看不到存储过程的内容。
随机的用户名及手机号。...1234567890', rand()* 10 , 1) ) into p_phone; if not exists ( select 1 from users where
什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于Java语言中的方法; ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大...这里涉及到MySQL的变量 MySQL变量一共有三种: 全局变量 全局变量又叫内置变量,是mysql数据库内置的变量 ,对所有连接都起作用。...查看所有全局变量: show variables 查看某个全局变量: select @@变量名 修改全局变量: set 变量名=新值 character_set_client: mysql服务器的接收数据的编码...character_set_results:mysql服务器输出数据的编码 会话变量 只存在于当前客户端与数据库服务器端的一次连接当中。...如果连接断开,那么会话变量全部丢失! 定义会话变量: set @变量=值 查看会话变量: select @变量 局部变量 在存储过程中使用的变量就叫局部变量。只要存储过程执行完毕,局部变量就丢失。
`ROUTINES` WHERE ROUTINE_SCHEMA = '数据库名称'; -- 查询某个存储过程的定义语句 SHOW CREATE PROCEDURE 存储过程名称; 删除存储过程: DROP...变量 ①系统变量 系统变量: ⚪系统变量:是MySQL服务器提供,不是用户定义的,属于服务器层面。分为全局变量(GLOBAL)、会话变量(SESSION)。...MySQL服务重新启动后,所设置的全局变量都会重置,想要不失效,可以在配置文件/etc/my.cnf文件中配置。...③ 局部变量 局部变量: ⚪局部变量:是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN...END块。...为局部变量赋值: SET 变量名 = 值; SET 变量名 := 值; SELECT 字段名 INTO 变量名 FROM 表名 WHERE 查询条件...; 4.
5.能够提高系统性能 由于存储过程和函数是经过编译后保存到MySQL数据库中的,首次执行存储过程和函数后,存储过程和函数会被保存到相关的内存区域中。...注意:名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。 2)过程参数 存储过程的参数列表。...DELIMITER 命令 在存储过程的创建中,经常会用到一个十分重要的 MySQL 命令,即 DELIMITER 命令,特别是对于通过命令行的方式来操作 MySQL 数据库的使用者,更是要学会使用该命令...; ·type:当前存储过程中参数的类型,此类型可以是MySQL数据库中支持的任意数据类型。...CREATE FUNCTION SelectNameById() RETURNS varchar(255) RETURN (SELECT name FROM t_goods WHERE id = 2);
mysql存储过程的特点 存储过程是一组预先编译的SQL语句的集合。编译后存储在数据库中。用户通过指定存储过程的名称并给出参数(如果存储过程中有参数)来调用和执行它。接下来我们对其特点展开探究。...特点: 1、增强SQL语言的功能和灵活性。可以用流控语句编写,灵活性强,完成复杂的判断和复杂的操作。 2、提高SQL的复用性和标准。 3、减少编译次数,快速执行,提高效率。...实例 mysql> DELIMITER // mysql> CREATE PROCEDURE proc1(OUT s int) -> BEGIN -> SELECT COUNT(...*) INTO s FROM user; -> END -> // mysql> DELIMITER ; 以上就是mysql存储过程的特点,希望对大家有所帮助。...更多mysql学习指路:MySQL 推荐操作系统:windows7系统、mysql5.8、DELL G3电脑
1:存储过程: 答:存储过程是sql语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理;存储过程存储在数据库内,可以由应用程序调用执行,而且允许用户声明变量以及进行流程控制,存储类型可以接受参数...,可以接受输入类型的参数,也可以接受输出类型的参数,并且可以存在多个返回值,因为存储过程的效率要比单一的sql语句执行效率高很多; 注意:存储过程执行效率之所高,在于普通的sql语句,每次都会对语法分析...语句;--->复合结构可以包含声明,循环,控制结构 4:创建一个简单的存储过程,然后调用这个简单的存储过程; 4.1:创建一个查询数据库版本号的存储过程; 1 #该存储过程查询数据库的版本号 2...3 4 5 方法二:CALL sp_name[()] 调用这个存储过程的语法如下所示: 1 #调用一个存储过程的语法 2 #CALL 存储过程的名称() 3 CALL sp1(); 4.2:创建一个带有...) 3 BEGIN 4 DELETE FROM tdb_goods WHERE goods_id = goodsId; 5 END 删除一个存储过程:drop producer 存储过程名称; 1
一、讲解例子 二、function内存管理过程讲解 三、function内存管理过程图例 四、总结 一、讲解例子 MySQL的存储过程在运行过程中的内存管理跟table等运行时候是不一样的,它涉及多层内存管理...procedure的内存管理也是一样的,只是少了return result相关的处理过程。...存储过程的内存管理过程很精妙,代码中会出现多次的thd->swap_query_arena来进行内存切换,必须严格区分哪些数据应该放在对应的那个arena,才能正确管理sp数据。...business=space_collection&business_id=343928&desc=0 ---- 文章推荐: MySQL 8.0有趣的新特性:CHECK约束 MySQL 启停过程了解一二...MySQL内存管理机制浅析 技术分析 | 浅析MySQL与ElasticSearch的组合使用 ---- 关于 GreatSQL GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR
阅读目录:MySQL存储过程_创建-调用-参数 存储过程:SQL中的“脚本” 1.创建存储过程 2.调用存储过程 3.存储过程体 4.语句块标签 存储过程的参数...一、存储过程的创建和调用 >存储过程就是具有名字的一段代码,用来完成一个特定的功能。 >创建的存储过程保存在数据库的数据字典中。...rows affected (0.01 sec) mysql> delimiter ; #将语句的结束符号恢复为分号 解析: 默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下...3、存储过程体 >存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等 >过程体格式:以begin...1 | +-------+ #以上可以看出,p_in在存储过程中被修改,但并不影响@p_id的值,因为前者为局部变量、后者为全局变量。
int, all_score int ); 存储过程 由括号包围的参数列必须总是存在。...IN参数是只传入 OUT参数是只传出 INOUT参数是既传入又传入,即双向传递 指定参数为IN, OUT, 或INOUT 只对PROCEDURE是合法的。...(FUNCTION参数总是被认为是IN参数) 建立存储过程,传入平时分x,卷面分y,平时分所占的比率pert,学号,课程号;建立过程如下 delimiter // CREATE PROCEDURE cal_grade...LABEL_PROC; END IF; SET t = ROUND( xpert + y(1-pert) ); UPDATE sc SET ordinary_score=x,last_score=y WHERE...my_connection = mysql_init (NULL); //下面连接的最后一个参数必须为CLIENT_MULTI_STATEMENTS,不然就会报错select error: PROCEDURE
领取专属 10元无门槛券
手把手带您无忧上云