29 SQL——事务操作

create  table account
(
    id   int auto_increment primary key comment '主键ID',
    name            varchar(18)           comment '姓名',
    money                    int           comment '余额'
)comment '账户表';

insert into account(id, name ,money)values(null,'张三',2000),
                                           (null,'李四',2000);





-- 转账操作(张三给李四转账1000)--正常操作
-- 1 查询 张三 账户余额
select *from account where name ='张三';
-- 2 将张三账户减少1000元 (更新操作)
update account set money =money -1000 where name='张三';

-- 3奖李四账户增加1000元(更新操作)
update account set money =money +1000 where name='李四';

-- 恢复数据(更新操作)
update account set money =2000 where name ='张三'or name ='李四';



-- 转账操作(张三给李四转账1000)-- 异常操作(每条SQL语句都是一个事务)
-- 1 查询 张三 账户余额
select *from account where name ='张三';
-- 2 将张三账户减少1000元 (更新操作)
update account set money =money -1000 where name='张三';

程序出现异常

-- 3奖李四账户增加1000元(更新操作)
update account set money =money +1000 where name='李四';



-- 方法1
-- 解决法案,将SQL语句控制在一个事务内
select @@autocommit;--  结果为1则是事务自动提交,为0是手动提交
select @@autocommit = 0;-- 设置事务手动提交
-- 转账操作(张三给李四转账1000)
-- 1 查询 张三 账户余额
select *from account where name ='张三';
-- 2 将张三账户减少1000元 (更新操作)
update account set money =money -1000 where name='张三';

-- 3奖李四账户增加1000元(更新操作)
update account set money =money +1000 where name='李四';
-- 提交事务(手动方式,只有提交了,才会真正的修改数据)
commit ;

-- 回滚操作(操作出现了异常,回滚返回操作前的数据)
rollback ;





-- 方法2
select @@autocommit = 1;-- 设置事务自动提交
-- 开启事务
start transaction ;
-- 转账操作(张三给李四转账1000)
-- 1 查询 张三 账户余额
select *from account where name ='张三';
-- 2 将张三账户减少1000元 (更新操作)
update account set money =money -1000 where name='张三';

-- 3奖李四账户增加1000元(更新操作)
update account set money =money +1000 where name='李四';

-- 提交事务(只有提交了,才会真正的修改数据)
commit ;

-- 回滚操作(操作出现了异常,回滚返回操作前的数据)
rollback ;

在这里插入图片描述
方法1
在这里插入图片描述
方法2

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值