mysql事务

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

原始数据

1create table user( 2id int primary key auto_increment, 3name char(32), 4balance int 5); 6 7insert into user(name,balance) 8values 9('wsb',1000), 10('egon',1000), 11('ysb',1000);

#原子操作

1start transaction; 2update user set balance=900 where name='wsb'; #买支付1003update user set balance=1010 where name='egon'; #中介拿走104update user set balance=1090 where name='ysb'; #卖家拿到905commit;

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

1start transaction; 2update user set balance=900 where name='wsb'; #买支付1003update user set balance=1010 where name='egon'; #中介拿走104uppdate user set balance=1090 where name='ysb'; #卖家拿到90,出现异常没有拿到 5rollback; 6commit; 7mysql> select * from user; 8+----+------+---------+ 9| id | name | balance | 10+----+------+---------+ 11| 1 | wsb | 1000 | 12| 2 | egon | 1000 | 13| 3 | ysb | 1000 | 14+----+------+---------+ 15rows in set (0.00 sec)

#介绍

1delimiter // 2 create procedure p4( 3 out status int 4 ) 5 BEGIN 6 1. 声明如果出现异常则执行{ 7 set status = 1; 8 rollback; 9 } 10 11 开始事务 12 -- 由秦兵账户减去100 13 -- 方少伟账户加90 14 -- 张根账户加10 15 commit; 16 结束 17 18 set status = 2; 19 20 21 END // 22 delimiter ;

View Code

#实现

1delimiter // 2create PROCEDURE p5( 3 OUT p_return_code tinyint 4) 5BEGIN 6 DECLARE exit handler for sqlexception 7 BEGIN 8 -- ERROR 9 set p_return_code = 1; 10 rollback; 11 END; 12 13 DECLARE exit handler for sqlwarning 14 BEGIN 15 -- WARNING 16 set p_return_code = 2; 17 rollback; 18 END; 19 20 START TRANSACTION; 21 DELETE from tb1; #执行失败 22 insert into blog(name,sub_time) values('yyy',now()); 23 COMMIT; 24 25 -- SUCCESS 26 set p_return_code = 0; #0代表执行成功 27 28END // 29delimiter ;

View Code

调用

#在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())

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''

mysql事务 - HelloWorld