4 事务
1、什么是数据库的事务?
数据库的事务是一个作为单个工作单位执行的一系列操作,这些操作要么完全地执行,要么完全不执行。事务由四个主要特性定义,通常被称为ACID属性:
- 原子性(Atomicity):事务中的所有操作都被视为一个整体,它们要么全部成功,要么全部失败。
- 一致性(Consistency):事务必须使数据库从一个一致的状态转换到另一个一致的状态。
- 隔离性(Isolation):并发执行的事务的结果必须与事务逐个串行执行的结果相同。
- 持久性(Durability):一旦事务提交,它对数据库的改变就是永久性的,即使系统发生故障也不会丢失。
例子
假设有一个银行应用程序,需要处理两个账户之间的转账事务。这个事务可以分为几个步骤:
- 从源账户扣除一定数额的金额(A账户减少$100)。
- 将该数额添加到目标账户(B账户增加$100)。
按照事务的原则,这两个操作必须一起完成。如果在从A账户扣款后系统崩溃,而金额还没有添加到B账户,事务的原子性将确保这些变化都不会应用到数据库中。一旦系统恢复,事务可以重新启动或完全回滚到开始状态,从而保证一致性和持久性。隔离性确保的是,在这个转账事务执行的同时,不会有其他事务影响这两个账户的状态。
4、事务的并发问题?
事务的并发控制是为了解决多个事务同时运行时可能出现的问题。主要的并发问题包括:
- 丢失修改(Lost Update):是指在多个同时进行的并发事务中,一个事务的修改被另一个事务的修改覆盖,导致前一个事务的修改结果丢失。
- 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据,如果那个事务回滚,读取的数据就是无效的。
事务A从账户读取余额为$500并将其更新为$600,