事务
事务是数据库指令的集合,事务里面的指令要么同时成功,要么同时失败,有效地防止多条SQL语句执行时,其中一条出错,导致某些结果错误的局面。
事务的四大特性:原子性、一致性、隔离性、持久性
事务对表的操作是临时操作
。
- 开启事务
start transaction;
或者 begin;
- 提交事务
没有提交事务之前的数据操作都是临时操作,不会真正修改数据。
commit;
- 回滚事务
数据操作出现异常,数据状态会回滚到开启事务之前
rollback;
例子:假如有一张存钱表,存储有A、B两人的钱金额,现在,A向B借500块钱,请用数据库语句完成操作。
存钱表
id | name | money |
---|---|---|
1 | A | 1000 |
2 | B | 1000 |
#普通执行语句如下:
update 存钱表 set money = money-500 where name = 'B';//1
update 存钱表 set money = money + 500 where name = 'A';//2
#以上语句在正常执行情况下,结果会是 A的钱为1500,B的钱为500。
#若在执行2时或前发生异常,此时A的钱为1000,B的钱为500,那么结果就不是我们想要的了。
#所以使用 事务 可以对表进行临时操作,避免这个情况发生
#开启事务
begin;
update 存钱表 set money = money-500 where name = 'B';//1
update 存钱表 set money = money + 500 where name = 'A';//2
#若发生异常可用rollback回滚事务
#确认此操作的结果是我们想要的后,便可提交事务了
#提交事务
commit;
小贴士:MySQL每条语句都是一次事务,那么有人就会问,如果它是事务那我们怎么不用提交,就会改变数据库的数据呢?其实,MySQL的事务的提交是自动的,查看方法如图所示:
如果把提交方式改为手动提交,执行SQL语句时,不加commit提交事务,就会发现并没有真正修改数据。