创建带有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类型参数的存储过程(四十八)的更多相关文章

  1. NeHe OpenGL教程 第四十八课:轨迹球

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. 第四十八个知识点:TPM的目的和使用方法

    第四十八个知识点:TPM的目的和使用方法 在检查TPM目的之前,值得去尝试理解TPM设计出来的目的是为了克服什么样的问题.真正的问题是信任.信任什么?首先内存和软件运行在电脑上.这些东西能直接的通过操 ...

  3. SQL注入之Sqli-labs系列第四十七关,第四十八关,第四十九关(ORDER BY注入)

    0x1 源码区别点 将id变为字符型:$sql = "SELECT * FROM users ORDER BY '$id'"; 0x2实例测试 (1)and rand相结合的方式 ...

  4. 《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)

    1.简介 webdriver有三种判断元素状态的方法,分别是isEnabled,isSelected 和 isDisplayed,其中isSelected在前面的内容中已经简单的介绍了,isSelec ...

  5. abp(net core)+easyui+efcore实现仓储管理系统——入库管理之十二(四十八)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...

  6. C#编程(四十八)----------列表

    C#中的List C#中deList怎么样?List<T>类是ArrayList类的泛型等效类,该类使用大小可按需动态增长的数组实现List<T>泛型接口. 泛型的好处:它为使 ...

  7. Unity 游戏框架搭建 2019 (四十八/四十九) MonoBehaviourSimplify 中的消息策略完善&关于发送事件的简单封装

    MonoBehaviourSimplify 中的消息策略完善 在上一篇,笔者说,MonoBehaviourSimplify 中的消息策略还有一些小问题.我们在这篇试着解决一下. 先贴出来代码: usi ...

  8. Android简易实战教程--第四十八话《Android - Timer、TimerTask和Handler实现倒计时》

    之前本专栏文章中的小案例有写到:第三十九话<Chronometer实现倒计时> 以及使用异步实现倒计时:第三十三话< AsyncTask异步倒计时> 本篇文章 结合Timer. ...

  9. 性能测试四十八:Jenkins+Ant+Jmeter系统部署

    工作步骤: 1.开发提交代码SVN/Git 2.代码编译.打war包 3.上传war包到服务器 4.重启web服务器 5.开始测试/自动化测试 6.发测试结果 Jenkins工作: 1.开发提交代码G ...

随机推荐

  1. Vue2.0父子组件间事件派发机制

    从vue1.x过来的都知道,在vue2.0中,父子组件间事件通信的$dispatch和$broadcase被移除了.官方考虑是基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会 ...

  2. 【BZOJ 1191】[HNOI2006]超级英雄Hero

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二分图的最大匹配. 因为要答下一题,这一题必须先答完. 所以如果某道题没有匹配了. 那么就直接break掉. [代码] #inclu ...

  3. Python学习第二天-编写三级菜单

    编写三级菜单:1. 运行程序输出第一级菜单2. 选择一级菜单某项,输出二级菜单,同理输出三级菜单3. 菜单数据保存在文件中4. 让用户选择是否要退出5. 有返回上一级菜单的功能 # Author: z ...

  4. 【C语言】递归函数DigitSum(n)

    //写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和, //比如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19 #include <std ...

  5. 冒泡,简单选择,直接插入排序(Java版)

    冒泡.简单选择,直接插入这三种排序都是简单排序. 工具类 package Utils; import java.util.Arrays; public class SortUtils { public ...

  6. Func委托和Action委托

    http://stackoverflow.com/questions/4317479/func-vs-action-vs-predicate The difference between Func a ...

  7. What's the difference between returning void and returning a Task?

    http://stackoverflow.com/questions/8043296/whats-the-difference-between-returning-void-and-returning ...

  8. WAF——针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入、XSS跨站、Webshell上传、命令注入、非法HTTP协议请求、非授权文件访问等

    核心概念 WAF Web应用防火墙(Web Application Firewall),简称WAF. Web攻击 针对Web应用发起的攻击,包括但不限于以下攻击类型:SQL注入.XSS跨站.Websh ...

  9. 登录安全验证+AJAX认证服务--流程图

  10. 搭建Mysql双机热备 (主从同步)

    准备两台centos7主机:10.0.18.132 master 10.0.18.136  slave 先把selinux关闭,iptables关闭  或者添加端口 132 master安装好Mysq ...