创建带有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 ...
随机推荐
- Jtester使用
1.在Jtester中使用DataMap 为什么要使用DataMap? 早先的jTester中提供了dbFit方式来准备和验证数据库数据,应该来说,这个工具解决了很多问题.实际使用过程中,开发同学反映 ...
- JavaScript函数写法整理
1.普通函数定义的两种写法 function hello(){ console.log("hello!"); } var hello = function(){ console.l ...
- Uart,IIC和SPI的区别
1.UART, SPI, IIC的详解 UART.SPI.IIC是经常用到的几个数据传输标准,下面分别总结一下: UART(Universal Asynchronous Receive Transmi ...
- POJ 1975 Median Weight Bead
Median Weight Bead Time Limit: 1000ms Memory Limit: 30000KB This problem will be judged on PKU. Orig ...
- 嵌入式表单字段中的内容可能被server更改以删除不安全的内容。是否要又一次载入您的页面以查看保存结果?
嵌入式表单字段中的内容可能被server更改以删除不安全的内容.是否要又一次载入您的页面以查看保存结果? 近期有朋友问到,当他在SharePoint首页上进行编辑时.插入一段代码. 完 ...
- jsp输出金字塔
<% String str = ""; for(int i = 1; i <= 5; i++){ for(int j = 1; j <= 5-i; j++){ s ...
- IIS 7.5 配置
安装 MVC 3 对应版本. 或者对应的版本. 登陆时候报错 检查下面几项是否配置正确 检查ASP.net 是否开启. 检查网站的应用池是否配置正确 在处理程序映射当中检查这几项是否配置正确 如果都配 ...
- 验证备份集-使用DBVERIFY工具
DBVERIFY确认备份集是否存在坏块 验证TEST03.DBF 文件的是否存在坏块 C:\Documents and Settings\Administrator>dbv file=D:\or ...
- 基于JavaSwing的例子-非连接数据库
项目结构: Constant.java package com.mstf.test; import java.io.Serializable; public class Constant implem ...
- T_SQL 日期函数
日期函数基数表达式的日期和时间或者是从时间间隔中返回值. GETDATE(),返回当前系统的日期和时间.例: SELECT GETDATE(); 结果为:2010-05-18 15:53:08.92 ...