创建带有IN类型参数的存储过程(四十八)
创建带有IN类型参数的存储过程
我们经常要从数据表中删除记录,一般情况我们删除记录都是根据id来删除的,比如我们通常要输入DELETE FROM 表名 WHERE 后面跟上我们的条件,因为我们要经常写这个语句,那么我们就可以将这个语句封装成一个存储过程,比如我们以users表为例,我们先来看一下user表的结构,我们输入 DESC user;

我们再来查看一下表中的记录,我们输入SELECT * FROM user;

假设我们现在要以id来删除记录。id每次都不固定,那么就需要我们在每次调用这个过程的时候去传递,所以我们现在需要带有IN类型的参数。
我们学习自定义函数的时候说过,所以这里我们也要修改一下mysql的定界符,我们输入DELIMITER // 把定界符改为//
下面我们来创建一个存储过程,我们输入CREATE PROCEDURE removeUserById(IN id INT UNSIGNED)
BEGIN
DELETE FROM user WHERE id=id; 第一个id是字段id,第二个id是我们要传入的参数,
END
//

OK,命令执行成功,下面我们再把定界符改过来,我们输入DELIMITER ;

OK,这个存储过程我们就创建成功了,下面我们来调用一下这个存储过程,因为我们定义的是有参的存储过程,所以我们就输入CALL removeUserById(4);

OK,命令执行成功,现在我们来查看一下这条记录有没有被删除掉,我们输入 SELECT * FROM user;

我们发现表中的记录都被删除掉了,这是为什么呢?
因为我们的参数名和字段名是一样的,我们知道第一个和第二个id分别表示什么意思,但是系统不知道呀,他会认为是两个字段,所以说我们在写参数名的时候,不能让参数名和字段名一样。这一点大家一定要记着,下面我们来修改一下这个存储过程,我们先来看一下修改存储过程的命令。
ALTER PROCEDURE sp_name [characteristic ...]
COMMENT 'string'
| {CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}
| SQL SECURITY { DEFINER | INVOKER}
实际上他只能修改这几个简单的选项,比如注释、内容的类型等等,并不能修改过程体,如果是修改过程体的话,只能先将存储过程删除,然后再进行重建,删除存储过程的方法很简单,就是DROP PROCEDURE [IF EXISTS] sp_name,所以我们现在只能先删除存储过程,我们输入DROP PROCEDURE removeUserById;

好,命令执行成功,刚才的那个存储过程就已经被删除掉了,现在我们先把数据表中的记录重构一下,然后再把存储过程重新创建一下,我们先来插入几条数据。

接下来我们就重新来构建一下存储过程,并修改一下定界符。我们输入DELIMITER //
OK,我们输入CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)
BEGIN
DELETE FROM user WHERE id=p_id; id是字段id, p_id是我们要传入的参数,
END
//

OK,这个存储过程我们就创建成功了,下面我们先来查看一下数据表的记录,我们输入SELECT * FROM user;

OK,接下来我们调用一下这个刚创建的存储过程,我们输入CALL removeUserById( 13);

OK,命令执行成功,下面我们看一下id=13的记录是否被删除掉。我们输入SELECT * FROM user WHERE id=13;

我们发现这条记录并不存在,也就说明这条记录已经被我们删除了,OK,这就是我们演示的第一个带有IN类型的参数。
创建带有IN类型参数的存储过程(四十八)的更多相关文章
- NeHe OpenGL教程 第四十八课:轨迹球
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 第四十八个知识点:TPM的目的和使用方法
第四十八个知识点:TPM的目的和使用方法 在检查TPM目的之前,值得去尝试理解TPM设计出来的目的是为了克服什么样的问题.真正的问题是信任.信任什么?首先内存和软件运行在电脑上.这些东西能直接的通过操 ...
- SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)
0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...
- 《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...
- abp(net core)+easyui+efcore实现仓储管理系统——入库管理之十二(四十八)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- C#编程(四十八)----------列表
C#中的List C#中deList怎么样?List<T>类是ArrayList类的泛型等效类,该类使用大小可按需动态增长的数组实现List<T>泛型接口. 泛型的好处:它为使 ...
- Unity 游戏框架搭建 2019 (四十八/四十九) MonoBehaviourSimplify 中的消息策略完善&关于发送事件的简单封装
MonoBehaviourSimplify 中的消息策略完善 在上一篇,笔者说,MonoBehaviourSimplify 中的消息策略还有一些小问题.我们在这篇试着解决一下. 先贴出来代码: usi ...
- Android简易实战教程--第四十八话《Android - Timer、TimerTask和Handler实现倒计时》
之前本专栏文章中的小案例有写到:第三十九话<Chronometer实现倒计时> 以及使用异步实现倒计时:第三十三话< AsyncTask异步倒计时> 本篇文章 结合Timer. ...
- 性能测试四十八:Jenkins+Ant+Jmeter系统部署
工作步骤: 1.开发提交代码SVN/Git 2.代码编译.打war包 3.上传war包到服务器 4.重启web服务器 5.开始测试/自动化测试 6.发测试结果 Jenkins工作: 1.开发提交代码G ...
随机推荐
- 洛谷 P1541 乌龟棋 (四维费用背包)
一开始直接用01背包 后来发现这个物品和位置有关. 也就是价值不是固定的 后来看了题解 看了卡片最多就4 所以这是一个四维费用的背包, 每一维是卡片的数量 价值就是当前的位置的价值. 但是与常规的背包 ...
- OpenResty.spec
Name: openresty Version: 1.13.6.1 Release: 2%{?dist} Summary: OpenResty, scalable web platform by ex ...
- 机载LIDAR技术及其应用
1 机载LIDAR的系统组成及原理 1.1 机载 LIDAR 技术的发展历程 LIDAR 技术和机载激光扫描技术的发展源自 1970 年,美国航空航天局(NASA)支持研制成功第一台对地观测 LIDA ...
- 【转】一天学会PHP(转)
[转]一天学会PHP(转) 只需要一天,只要你用心去看和学,一定行. - 这里希望大家需要明白一点,这只是在讲如何快速入门,更好的认识PHP!也能初级掌握PHP基础知识!PHP语言博大精深!并不是一两 ...
- 最多包含2/k个不同字符的最长串
看这里的解答: http://www.cnblogs.com/grandyang/p/5351347.html 通用解决了2和k的问题.
- 第九章 TCP和UDP同一时候用复用一个port实现一个回射server
#include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include &l ...
- 漫谈linux之文件IO篇(SSD写性能和机械硬盘差不多,读是4到10倍)
前同事的文章,觉得写得很清晰,收藏了. http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的东西,技术 ...
- 三分钟明白 Activiti工作流 -- java运用_转载
一. 什么是工作流 以请假为例,现在大多数公司的请假流程是这样的 员工打电话(或网聊)向上级提出请假申请——上级口头同意——上级将请假记录下来——月底将请假记录上交公司——公司将请假录入电脑 采用工作 ...
- healthcheck
-- ============================================================================= -- USAGE : sqlplus ...
- centos 安装 aria2 webui 实现网页下载
centos aria2 webui 安装aria2 安装 rpmforge源 wget http://repository.it4i.cz/mirrors/repoforge/redhat/el6/ ...