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