存储过程--mysql
https://zhuanlan.zhihu.com/p/23423264
存储过程-官方解释:
是sql语句和控制语句的预编译集合。以一个名称存储并作为一个单元处理。
存储过程-直白的说:
把需要的命令预编译好。存到数据库。只在第一次的时候需要编译,存储后,以后使用的时候客户端直接(传参)调用。各种省事。
优点:
增强sql语句的功能性和灵活性
实现较快的执行速度
减少网络流量【因为往数据库传递的参数少了。所以请求少了】
怎么使用:
A、首先需要DELIMITER 语句来修改定界符
B、然后创建存储过程【CREATE PROCUDURE】过程体中可以用 in 和 out 传参。
C、通过CALL来调用
为什么使用DELITIMITER 修改定界符?
mysql默认以分号作为sql语句的结束来进行执行,当我们在创建存储过程时,为
了不让完整的存储过程语句由于分号而提前执行,需要临时规定以//或者$$来作
为结束符号。这样的话,创建存储过程时,中间的分号会被忽略,直到遇到//符
号才执行语句。
注意:
A、因为存储过程的 过程体不可修改,所以设置错误后,一般都是删除后,重新创建。
B、设置的参数,不要和表中的字段名字相同。
DROP PROCEDURE 名字; 删除命令
举例:【带有一个参数的存储过程 IN】
@var int p_id 关联id
delimiter // 重新定义定界符
create procedure removeUserId(IN p_id INT UNSIGNED)
BEGIN
DELETE FROM users where id = p_id;
END
//
delitimer ; 这里是把定界符在修改回来
CALL removeUserId(3); 调用
举例:【带有IN 和 OUT类型参数的存储过程】
@var int p_id 关联id
@var int userNums 删除后剩下的条数
DELITIMER //
CRTEATE PROCEDURE removeAndReturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED) 这里设置了两个参数
BEGIN
DELETE FROM users WHERE id = p_id;
SELECT COUNT(id) FROM USERS INTO userNums;
END
//
DELITIMER ;
CALL removeAndRrturnUserNums(27,@nums) //这里的@ 是用户变量。下面是总结
注意:
mysql变量的术语分类:
A.用户变量:以"@"开始,形式为"@变量名"
用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
B、全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名 或者 set @@global.变量名
对所有客户端生效。只有具有super权限才可以设置全局变量
认识一个系统函数:row_count()
row_count(); 得到操作行数。(单独用没用)
例子:插入数据
INSERT test(username) VALUES('A'),('B'),('C');
SELECT ROW_COUNT(); //返回被插入的记录总数 结果为3
举例:【带有多个 OUT类型参数的存储过程】
@var SMALLINT p_age 关联p_age
@var SMALLINT deleteUsers 删除总条数
@var SMALLINT userCounts 剩余总条数
DELIMITER //
CREATE PROCEDURE rmUserByAgeAndRtInfos(IN p_age SMALLINT UNSIGNED, OUT deleteUsers SMALLINT UNSIGNED, OUT userCounts SMALLINT UNSIGNED)
BEGIN
DELETE FROM users WHERE WHERE age = p_age; //删除条件
SELECT ROW_COUNT() INTO deleteUsers; //返回刚删的记录
SELECT COUNT(id) from users INTO userCounts; //得到剩余的ID数
END
//
DELIMITER ;
CALL rmUserByAgeAndRtInfos(23, @a, @b);
SELECT @a, @b;
总结:
存储过程一般都是实现复杂一些的功能
存储过程一般独立来执行。
存储过程常常针对表操作。
根据需要定制存储过程。
存储过程--mysql的更多相关文章
- mybatis/callablestatement调用存储过程mysql connector产生不必要的元数据查询
INFO | jvm 1 | 2016/08/25 15:17:01 | 16-08-25 15:17:01 DEBUG pool-1-thread-371dao.ITaskDao.callProce ...
- mysql jdbc性能优化之mybatis/callablestatement调用存储过程mysql jdbc产生不必要的元数据查询(已解决,cpu负载减少20%)
INFO | jvm 1 | 2016/08/25 15:17:01 | 16-08-25 15:17:01 DEBUG pool-1-thread-371dao.ITaskDao.callProce ...
- 触发器 视图 存储过程 mysql常用函数
...
- 到底该不该使用存储过程 MySQL查询性能优化一则
到底该不该使用存储过程 看到<阿里巴巴java编码规范>有这样一条 关于这条规范,我说说我个人的看法 用不用存储过程要视所使用的数据库和业务场景而定的,不能因为阿里巴巴的技术牛逼,就视 ...
- java调用存储过程mysql
在java中调用带返回值的存储过程的实现 直接上代码: DELIMITER $$ CREATE /*[DEFINER = { user | CURRENT_USER }]*/ PROCEDURE `t ...
- 订单支付成功后存储过程 - MYSQL
BEGIN SET @userId = (SELECT user_id FROM t_shoporder WHERE id = orderId); /*修改订单状态,改成已支付*/ ,update_t ...
- 下订单存储过程 - MYSQL
BEGIN DECLARE smark INT; DECLARE orderId INT; /*查询课程是否存在,如果不存在就不执行订单操作了*/ ) FROM t_course WHERE id = ...
- MySQL主从环境下存储过程,函数,触发器,事件的复制情况
下面,主要是验证在MySQL主从复制环境下,存储过程,函数,触发器,事件的复制情况,这些确实会让人混淆. 首先,创建一张测试表 mysql),age int); Query OK, rows affe ...
- 我的MYSQL学习心得(十) 自定义存储过程和函数
我的MYSQL学习心得(十) 自定义存储过程和函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心 ...
随机推荐
- Tomcat Add and Remove 项目时提示 Project facet Java version 1.8 is not supported 错误
原因:项目的jdk和tomcat的jdk版本不同 将eclipse-preference-server-runtime environments 点击你要用的tomcat 点击 edit-jre选择和 ...
- C开发系列-预处理指令
简介 OC程序执行过程,在源代码编译成0跟1的二进制文件之前.执行的指令称之为预处理指令. 所有的预处理指令都是以#开头.#import也是预处理指令.预处理指令主要分为三种 宏定义 条件编译 文件包 ...
- HandlerInterceptorAdapter或HandlerInterceptor的使用
Spring拦截器 HandlerInterceptorAdapter需要继承,HandlerInterceptor需要实现 可以作为日志记录和登录校验来使用 建议使用HandlerIntercept ...
- AtCoder - 3959
AtCoder - 3959https://vjudge.net/problem/1583855/origin求最长连续递增长度就行,答案是n-max(len) #include<iostrea ...
- HZOI20190803 A,C题
题目链接:https://www.cnblogs.com/Juve/articles/11295333.html A: 考场上只有70分... 发现几个性质:特殊性质1:在两条链上,看它是fib第几项 ...
- Django项目:CRM(客户关系管理系统)--75--65PerfectCRM实现CRM课程分数排名
# classtop_urls.py # ————————64PerfectCRM实现CRM课程排名详情———————— from django.conf.urls import url from b ...
- CSS 滤镜效果
本文所描述的滤镜,指的是 CSS3 出来后的滤镜,不是 IE 系列时代的滤镜,语法如下,还未接触过这个属性的可以先简单到 MDN -- filter 了解下: { filter: blur(5px); ...
- ajax传输数据
AJAX向后台传输数//1 直接在url中传递 $.ajax({ type: "POST", url: "/testAjax/addUser?id=1&name= ...
- MyBatis配置文件(二)--settings配置
settings是MyBatis中最复杂的配置,它能影响MyBatis底层的运行,大部分情况下使用默认值,只需要修改一些常用的规则即可.常用规则有自动映射.驼峰命名映射.级联规则.是否启动缓存.执行器 ...
- [code]图像亮度调整enhancement
//draft 2013.9 //F=X2/u; ////远处细节被淹没. 亮的地方增亮明显,暗的地方更暗. 不可取. // CvScalar rgb; // rgb=cvAvg(src); //fo ...