事务及隔离级别
1.事务
1.1事务的ACID属性
-
原子性(Atomicity): 一个事务中的操作要求要么全部执 行,要么全部不执行.
-
一致性(Consistency): 在外部看来,数据库中的数据总 是正确的.
-
隔离性(Isolation): 尽管多个事务在并发执行,但从外 部看来,具有多个事务串行执行的效果.
-
持久性(Durability):一个事务一旦提交了,即使随后发 生故障,其结果在数据库中不会丢失.
2.隔离级别
2.1四种隔离级别
- 读未提交、读提交、可重复读、串行化
- 读未提交(Read-uncommitted):一个事务还没提交时,它做的变更就能被别的事务看到。
- 读提交(Read-committed):一个事务提交之后,它做的变更才会被其他事务看到。
- 可重复读(Repeatable-read):一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。当然未提交变更对其他事务也是不可见的。
- 串行化(Serializable):对于同一行记录,“写”会加写锁,读会加“读锁”,当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。
2.2事务的并发问题
-
脏读(dirty read):如果一个事务读到了另一个未提交事务修改过的数据。
事务A 事务B 事务开始 余额100元 事务开始 存入100元 查询余额为200元 提交事务