目录
事务简介
事务:MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!事务会把所有的操作作为一个整体一起像系统提交或撤销操作请求。即这些操作要么同时成功要么同时失败。
举例:
事务操作
为了方便下面的操作,我们提供一下数据:
-- 事务-------------------------------------------------
create table account(
id int auto_increment primary key comment '主键',
name varchar(20) comment '姓名',
money int comment '余额'
)comment '账户表';
insert into account(name,money) values ('张三',2000),('李四',2000);
未控制事务
-- 转账----------------------------------------------
select * from account where name='张三';
update account set money=money-1000 where name='张三';
update account set money=money+1000 where name='李四';
执行结果
可以看到得到了正常的结果。
接下来我们测试下面代码:
首先我们把两个人的余额都恢复正常。
update account set money=2000 where name='张三' or name='李四';
然后我们进行下一步操作:
-- 转账----------------------------------------------
select * from account where name='张三';
update account set money=money-1000 where name='张三';
异常。。。。
update account set money=money+1000 where name='李四';
我们这个异常设置的虽然有点随意,但是是可以完成任务的哈。
我们再看一下执行结果。
我们可以看到张三的资产减少了但是李四的资产没有变多。那要这样岂不是乱了套了。所以在sql里面提供了管理事务的方法。
控制事务
(1)查看事务提交方式
-- 查看事务提交方式--------------------------------
select @@autocommit;
(2)设置事务提交方式
set @@autocommit=0; #设置为手动提交 只改变当前页面
set @@autocommit=1;
(3)提交事务
-- 手动提交--------------------------
commit ;
(4)回滚事务
-- 回滚事务--------------------
rollback ; #提交出现异常就回滚
除此之外,还有另一种方式控制事务。
案例:
-- 转账----------------------------------------------
start transaction ;
select * from account where name='张三';
update account set money=money-1000 where name='张三';
update account set money=money+1000 where name='李四';
-- 手动提交--------------------------
commit ;
-- 回滚事务--------------------
rollback ; #提交出现异常就回滚
这种事务的提交方式,是每次开始直到commit结束一次。而第一种控制事务是提交后如果autocommit还是0则一直都是手动提交。