mysql fetch 事务_mysql内置功能—事务

一 事务

事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。

原子性就是将一对sql语句放在一起,要么同时执行成功,要么同时执行失败。

应用场景:转账

create table user(

id int primary key auto_increment,

name char(32),

balance int

);

insert into user(name,balance)

values

('alice',1000),

('nico',1000),

('jack',1000);

#原子操作

start transaction;

update user set balance=900 where name='alice'; #买支付100元

update user set balance=1010 where name='nico'; #中介拿走10元

update user set balance=1090 where name='jack'; #卖家拿到90元

commit; # 没有执行commit就并没有完成修改

#出现异常,回滚到初始状态

start transaction;

update user set balance=900 where name='alice'; #买支付100元

update user set balance=1010 where name='nico'; #中介拿走10元

uppdate user set balance=1090 where name='jack'; #卖家拿到90元,出现异常没有拿到

rollback; # 执行rollback,就滚回初始状态

commit;

mysql> select * from user;

+----+------+---------+

| id | name | balance |

+----+------+---------+

| 1 | alice| 1000 |

| 2 | nico | 1000 |

| 3 | jack | 1000 |

+----+------+---------+

rows in set (0.00 sec)

出现 错误才回到初始状态

#介绍

delimiter //

create procedure p4(

out status int

)

BEGIN

1. 声明如果出现异常则执行{

set status = 1;

rollback;

}

开始事务

-- 由秦兵账户减去100

-- 方少伟账户加90

-- 张根账户加10

commit;

结束

set status = 2;

END //

delimiter ;

#实现

delimiter //

create PROCEDURE p5(

OUT p_return_code tinyint

)

BEGIN

DECLARE exit handler for sqlexception # sqlexception 异常

BEGIN

-- ERROR # 出错回滚

set p_return_code = 1;

rollback;

END;

DECLARE exit handler for sqlwarning

BEGIN

-- WARNING # 警告回滚

set p_return_code = 2;

rollback;

END;

START TRANSACTION;

DELETE from tb1; #执行失败

insert into blog(name,sub_time) values('yyy',now());

COMMIT;

-- SUCCESS

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

END //

delimiter ;

#在mysql中调用存储过程

set @res=123;

call p5(@res);

select @res;

#在python中基于pymysql调用存储过程

cursor.callproc('p5',(123,))

print(cursor.fetchall()) #查询select的查询结果

cursor.execute('select @_p5_0;')

print(cursor.fetchall())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值