MySQL---储存过程

创建存储过程

CREATE PROCEDURE sp_name ([proc_parameter[,…]])
routine_body

proc_parameter:
- [IN|OUT|INOUT] param_name type

参数
- IN,表示给参数的值必须在调用存储过程时指定
- OUT,表示该参数的额值可以被存储过程改变,并可以返回
- INOUT,表示该参数的调用时指定,并且可以被改变和返回

调用存储过程

  • CALL sp_name([parameter[,…]])
  • CALL sp_name[()]

无参过程的调用可以不写小括号

# 创建无参数的储存过程
mysql> CREATE PROCEDURE sp1() SELECT VERSION();

# 调用无参数的储存过程可以不加括号
mysql> CALL sp1;
mysql> CALL sp1();
+------------+
| VERSION()  |
+------------+
| 5.7.18-log |
+------------+
# 创建IN类型参数
mysql> CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)
    -> BEGIN
    -> DELETE FROM user WHERE id = p_id ;
    -> END
    -> //

mysql> CALL removeUserById(9)//

删除储存过程

DROP PROCEDURE [IF EXISTS] sp_name

示例

// 删除指定的记录,并返回剩余记录的数量
mysql> CREATE PROCEDURE removeUserAndReturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED)
    -> BEGIN
    -> DELETE FROM user WHERE id = p_id;
    -> SELECT COUNT(id) FROM user INTO userNums;
    -> END
    -> //
Query OK, 0 rows affected (0.00 sec)
  • ROW_COUNT(); 被增删改更改的行数
# 使用ROW_COUNT() 获得被更改的行数
mysql> DELIMITER //
mysql> CREATE PROCEDURE removeUserByUserName(IN user_name VARCHAR(20),OUT deleteCount INT,OUT restCount INT)
    -> BEGIN
    -> DELETE FROM user WHERE username = user_name;
    -> SELECT ROW_COUNT() INTO deleteCount;
    -> SELECT COUNT(id) FROM user INTO restCount;
    -> END
    -> //

mysql> SELECT @a,@b;
+------+------+
| @a   | @b   |
+------+------+
|    3 |    4 |
+------+------+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值