mysql 存储过程开发_MySQL之存储过程

1. 什么是存储过程

是任意的sql语句的组合,被放到某一个存储过程中,类似于一个函数,有一个函数,有参数,还是函数体

2. 为什么使用存储过程

包含任何的sql语句,逻辑处理,事务处理。所有的我们学过的sql都可以放到里面

3. 三种开发方式的对比

第一种:应用程序只关注业务逻辑,所有与数据相关的逻辑封装到mysql中

​优点:应用程序要处理的事情变少了,可以减少网络传输

​缺点:增加了人力成本和沟通成本,降低了开发效率

第二种:应用程序既要处理业务逻辑,还有自己编写sql语句

​优点:降低了沟通成本,人力成本

​缺点:网络传输增加,sql语句编写非常繁琐,易出错

第三种:通过ORM框架。对象关系映射,自动生成sql语句并执行

​优点:简化编写sql语句的过程,提升了开发速度

​缺点:不够灵活。数据库和应用程序开发者完全隔离,可能导致开发者仅关注上层开发,而不清楚底层原理

4. 如何使用存储过程

1. 语法

-----------创建--------

create procedure pro_name(p_Type p_name data_type)

begin

sql语句 ... 流程控制

end

-----------参数---------------

p_Type:

in 输入

out 输出

inout 输入输出

p_name参数的名字

data_type:参数的数据类型 如 int float

-----------删除----------------

drop procedure pro_name;

-----------查看----------------

show create procedure pro_name;

-----------查看某个库中的所有存储过程----------------

select name from mysql.proc where db = "库名" and type = "procedure";

select name from mysql.proc where db = "day41_1" and type = "procedure";

# 测试数据

create table account(id int primary key auto_increment,name char(10),money float);

insert into account values(null,"big",1000),(null,"dog",2000),(null,"cat",3000),(null,"me",0);

2. 示例

---------------------示例1-----------------------

delimiter //

create procedure plf(in a int,in b int,out c float)

begin

set c = a + b;

end //

delimiter ;

set @res = 0;# 设置变量

call plf(1,2,@res);# 调用该存储对象。ps:out类型的数据,在调用时必须给定变量。

---------------------示例2-----------------------

// 我们需要把将更新语句写错,同时让其自动触发一个异常报错,然后执行回滚操作

delimiter //

create procedure transfer(in aid int,in bid int,in m float,out p_return_code int)

begin

DECLARE exit handler for sqlexception

BEGIN

# ERROR

set p_return_code = 1;

rollback;

END;

# exit 也可以换成continue 表示发生异常时继续执行

DECLARE exit handler for sqlwarning

BEGIN

# WARNING

set p_return_code = 2;

rollback;

END;

# 事务执行

START TRANSACTION;

update account set money = money - m where id = aid;

# 故意将money字段写错,让其执行报错,从而执行上面的异常捕捉中的代码

update account set moneys = money + m where id = bid;

COMMIT;

# 如果成功,p_return_code为0

set p_return_code = 0;

end //

delimiter;

set @p_return_code = 10;// 需要提前设置变量

call transfer(1,2,100,@p_return_code);# 1,2分别为account表中对应的id,100为钱,@p_return_code代表上面的变量

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值