zoukankan      html  css  js  c++  java
  • 创建带有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类型的参数。

  • 相关阅读:
    C#根据长度创建数组
    PLC读取数据高低位交换,批量保存到list集合,方便调用。
    C#读取图片流保存到文件,再读取流文件,把图片再显示出来
    C#从SQL server数据库中读取l图片和存入图片[转]
    C# 数据库查询表字段,写入到combox
    C# MSSQL数据库查询SQL语句拼接
    C# winform只允许程序运行一个
    C# 定时关机代码
    C#用委托来动态显示日期和时间
    使用margin负值实现压住相邻边距
  • 原文地址:https://www.cnblogs.com/zlslch/p/6543298.html
Copyright © 2011-2022 走看看