介绍

存储过程的优点

  • 增强SQL语句的功能和灵活性
  • 实现较快的执行速度
  • 减少网络请求

参数

  • IN 参数的值必须是在调用存储过程时指定
  • OUT 参数值可以被存储过程改变,并且可以返回。
  • INOUT 参数值在调用时指定,并且可以被改变和返回。

创建不带参的存储过程

使用关键字PROCEDURE来创建。调用需要使用CALL来调用;

  1. -- 创建
  2. mysql> CREATE PROCEDURE sqlV() SELECT VERSION();
  3. Query OK, 0 rows affected (0.07 sec)
  4. -- 调用
  5. mysql> CALL sqlV();
  6. +-----------+
  7. | VERSION() |
  8. +-----------+
  9. | 8.0.11 |
  10. +-----------+

创建带有IN参数的存储过程

创建IN类型的存储过程,定义时候需要使用关键字IN来定义才能生效,否则和自定的函数无区别。

  1. -- 创建带有IN 类型的
  2. mysql> CREATE PROCEDURE removeId(IN p_id int)
  3. -> BEGIN
  4. -> DELETE FROM user WHERE id=p_id;
  5. -> END;;
  6. Query OK, 0 rows affected (0.03 sec)
  7. mysql> CALL removeId(2);;
  8. Query OK, 1 row affected (0.04 sec)

创建带有IN和OUT参数的存储过程

OUT返回的参数可以使用接受变量的方式。

  1. -- 定义INout函数
  2. mysql> CREATE PROCEDURE InOfOut(IN p_id INT,OUT p_num INT)
  3. -> BEGIN
  4. -> DELETE FROM user WHERE id=p_id;
  5. -> SELECT COUNT(id) FROM user INTO p_num;
  6. -> END;;
  7. -- 查询
  8. mysql> CALL InOfOut(3,@sum);;
  9. -- 查询剩余数据总数
  10. mysql> SELECT @sum;;
  11. +------+
  12. | @sum |
  13. +------+
  14. | 25 |
  15. +------+