解决的问题
- 数据表保存了一些人的账户余额,接下来进行 甲向乙转账5000元.此过程两个步骤:
1.甲的账户余额减去5000
2.乙的账户余额增加5000 如果1 执行成功 但是在执行2 的时候执行失败,此时甲的余额减少而乙的余额并没增加.出现这样的情况就需要事务来解决
事务的概念:
- 把一组操作封装到一起.成为了一个共同的执行单元.避免出现上述的情况.
事务的基本特性ACID:
- 原子性 事务中的若干个操作要么全部执行成功,要么就全部执行失败.
全部执行失败的过程就是一旦某一个步骤执行出现问题就把前面的已经执行完毕的步骤回滚回去,借助逆向操作来把原来操作造成的影响进行还原. - 一致性:执行事务前后,数据始终处于一种合法的状态 例如:现有完整性约束a+b =
10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b =10.否则事务失败. - 持久性:事务一旦执行完毕,对于数据的修改就是持久生效的,即使出现宕机也不会丢失(数据写入了磁盘中)
- 隔离性:一个事务所做的修改在最终提交之前,对其他事务不可见.
例如A向B转账,这个交易还未完成的情况下,此时B查询自己的账户,是看不到新增加的余额.