什么是事务
事务指的程序的某一个操作的单元。通常来说,事务指的就是数据库的事务。
e.g:淘宝下单-->生成订单-->查询库存-->扣减库存-->发送通知
这就是一个操作的单元
例子:
事务的特性
事务具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常被称为ACID特性
原子性(Atomicity):
事务作业一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。(要么一起成功,要么一起失败)
- e.g:张三向李四转账(若不加事务)
可能会出现:
- 张三-500 转账失败
- 李四+500 收款成功
- e.g:张三向李四转账(若加事务)
成功就都成功,失败则都失败
- 张三-500 转账成功 / 张三-500 转账失败
- 李四+500 收款成功 / 李四+500 收款失败
一致性(Consistency):
事务应确保数据库的状态从一个一致状态转变为另一个一致状态,一致状态的含义是数据库中的数据应满足完整性约束。
- e.g:张三向李四转账500
- 事务前:张三1000,李四1000,两者之和2000
- 事务后:张三500,李四1500,两者之和2000
(不管怎么样,最终张三和李四的钱加起来的和是2000,这就是事务的一致性)
隔离性(Isolation):
多个事务并发执行时,一个事务的执行不应影响其它事务的执行。
- e.g:张三向李四转500
王五向赵六转1000
两者互不影响
持久性(Durability):
一个事务一旦提交,他对数据库的修改应该永久保存在数据库中。事务一旦提交(commit),对数据做的更改就永久保存。
- e.g:张三有1500,向李四转了500,李四一开始没有钱,后来张三变1000,李四变500,在后续的过程中没有发生新的事务的话,张三一直是1000,李四一直是500。