mysql存储过程跨库事务_mysql数据库之事务与存储过程

事务

什么是事务?

事务是指一些SQL语句的集合,这些语句同时执行成功完成某项功能

事务的CAID特性:

原子性:一个事务的执行是整体性的,要么内部所有语句都执行成功,要么一个都别想成功

一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态。

隔离性:一个事务的执行不可以被其他事务干扰,一个事物内部语句执行不受并发的其他操作影响,彼此相互隔离。

持久性:事务的提交对数据库的改变是永久性的,不受外部因素或其他操作影响

事务的语法规则:

create table user(

idint primary keyauto_increment,

namechar(32),

balanceint);insert into user(name,balance) values("zhangsan",1000),

("lisi",1000),

("wangwu",1000);

# 下面产生事务操作

starttransaction;update user set balance = 900 where name ="zhangsan"; # 买家支付100元update user set balance = 1010 where name ="lisi"; # 中介拿10元抽成update user set balance = 1090 where name ="wangwu"; # 商家得90元rollback; # 事务回滚

# 开启事务之后,只要没有执行commit操作,数据其实都没有真正刷新到硬盘commit;

#开启事务检测操作是否完整,不完整主动回滚到上一个状态,如果完整就应该执行commit操作

存储过程

概念:存储过程包含一堆sql语句,可以通过对存储过程的名字来调用执行内部语句,类似于其他编程语言中的函数

存储过程的

三种开发模型:

第一种:

应用程序:只需要开发应用程序的逻辑

mysql:事先编写好存储过程,供应用程序随时调用

优点:开发效率和执行效率高

缺点:人为因素较多,跨部门沟通等,扩展性较差

第二种:

应用程序:除了要开发应用程序逻辑,还需要编写原生的sql语句

优点:扩展性较高,都根据mysql语法规则来编写sql语句即可

缺点:编写原生sql语句十分复杂,并且要考虑到sql语句优化的问题,这就导致了开发效率和执行效率降低的问题

第三种:

应用程序:只考虑应用程序的逻辑,不需要管SQL语句的实现,基于第三方的工具和库

优点:开发效率高,直接调用已封装好的功能和方法就好,有更好的兼容性

缺点:执行效率比较低,执行效率不如第二种

如何创建存储过程:

# 存储过程在那个库下创建即在哪个库下面生效,不是全局的

#1、直接在mysql中调用set @res=10 # res的值是用来判断存储过程是否被执行成功的依据,所以需要先定义一个变量@res存储10call p1(2,4,10); # 报错

call p1(2,4,@res);

# 查看结果select @res; # 执行成功,@res变量值发生了变化#2、在python程序中调用

pymysql链接mysql

产生的游表cursor.callproc('p1',(2,4,10)) # 内部原理:@_p1_0=2,@_p1_1=4,@_p1_2=10;cursor.excute('select @_p1_2;')

#3、存储过程与事务使用举例(了解)

delimiter//

create PROCEDUREp5(

OUT p_return_codetinyint)BEGIN

DECLARE exit handler forsqlexceptionBEGIN

--ERROR

set p_return_code = 1;rollback;END;DECLARE exit handler forsqlwarningBEGIN

--WARNING

set p_return_code = 2;rollback;END;

STARTTRANSACTION;update user set balance=900 where id =1;pdate user123 set balance=1010 where id = 2;pdate user set balance=1090 where id =3;COMMIT;--SUCCESS

set p_return_code = 0; #0代表执行成功END //delimiter ;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值