1. 介绍 ``` 含义:
    1. 一组预先编译好的 SQL 语句的集合 , 理解成批处理语句

好处:

  1. 1. 类似于Java中的方法
  2. 2. 提高代码的重用性
  3. 3. 简化操作
  1. 减少了编译次数 , 并且减少了和数据库服务器的连接次数 , 提高了效率

特点:

1. 可以有 0 个返回 , 也可以有多个返回 
  1. 适合做批量插入 , 批量更新 ```
  1. 创建语法
    create procedure 存储过程名(参数列表)
    begin
     # 存储过程体
    end
    
    ```
  2. 参数列表包含三部分 ( 参数模式 参数名 参数类型,… )
  1. 参数模式
    • in: 被这个修饰的 参数需要传入
      • out: 该参数可以作为返回值
      • inout: 既可以传入 也可以 返回
  1. 如果存储过程体仅仅只有一句话 , begin end 可以省略,

  2. 存储过程体中的每条SQL语句的结尾 , 要求必须加分号

  3. 存储过程的结尾可以使用 delimiter 重新设置 语法: delimiter 结束标记

    例如: delimiter $


3. 调用方法

call 存储过程名( 实参数列表 )


4. 删除存储过程

drop procedure p1;


---

- 空参案例
```sql
# 创建方法
delimiter $
create procedure myMethod()
begin
    insert into user(`user_name`,`age`) values('王麻子',18),('王二狗',18),('李狗蛋',18);
end $

# 调用
call myMethod()$
  • 参数为 in 模式 ```sql

    创建方法

    delimiter $ create procedure myMethod(in userName varchar(20),in age int(10)) begin insert into user(user_name,age) values(userName,int); end $

调用

call myMethod(‘王麻子’,10)$


- 参数为 out 模式
```sql
# 创建方法
delimiter $
create procedure myMethod(out a varchar(20))
begin
    select u.name into a
  from user u
  where id=1
end $

# 调用
call myMethod(@userName)$
select @userName$
  • 参数为 inout 模式 ```sql

    创建方法

    delimiter $ create procedure myMethod(inout a int(20)) begin set a=a*2; end $

调用

set @number=2;$ call myMethod(@number)$ select @number$ ```