事务简介
事务是一组操作的集合,他是一个不可分割的工作单位,事务会把所有的操作作为一个整体
一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
事务中的操作全执行成功后才会提交事务。
如果执行事务过程中出现了异常,就要事务回滚(指把临时修改的数据给恢复过去)。
默认Mysql的事务是自动提交的,也就是说,当执行了一条DML语句,Mysql会立即隐式的
提交事务。
事务操作
-- -----------事务操作--------------
-- -----------数据准备----------------
create table account
(
id int auto_increment comment 'ID' primary key,
name varchar(10) comment '姓名',
money int comment '余额'
)
comment '账户表';
insert into account(id, name,money) values (null,'张三',2000),(null,'李四',2000);
-- ---------恢复数据-------------
update account set money = 2000 where name='张三';
update account set money = 2000 where name='李四';
-- 转账操作(张三给李四转1000)
-- 1.查询张三账号的余额
select money from account where name='张三';
-- 2.如果余额大于等于1000,张三账号的余额减1000
update account set money=money-1000 where name='张三' ;
-- 3.给李四账户的余额加1000
update account set money=money+1000 where name='李四';
查看/设置事务的提交方式
-- select @@autocommit; 查看是否为自动提交 1自动提交,0手动提交
-- set @@autocommit=0; 设置为手动提交
提交事务
-- commit; 设置为手动后要想提交事务必须执行这一条指令
回滚事务 回滚是为了清空缓冲区,虽然报错了不会提交,但是数据还在缓冲区内,下次提交可能出现问题
-- rollback; 回滚数据的指令
select @@autocommit;
set @@autocommit=1;
-- 提交事务
commit;
-- 回滚事务
rollback;
方式2
开启事务
-- start transaction 或 begin;
提交事务
-- commit;
回滚事务
-- rollback;
-- 1.查询张三账号的余额
start transaction ;-- 开启事务
select money from account where name='张三';-- 2.如果余额大于等于1000,张三账号的余额减1000
update account set money=money-1000 where name='张三' ;-- 3.给李四账户的余额加1000
update account set money=money+1000 where name='李四';
-- 提交事务
commit ;
-- 回滚事务
rollback ;