- 事务的特性
事务并不等同于ACID
, 事务只是一个程序的执行单元?!是一个操作的集合?!
在权衡[隔离]和[并发]操作,定义了四个事务的隔离级别和不同的副作用。
这四个隔离级别分别是:
- 未提交读
- 连基本的脏读问题都解决不了,很少使用。
- 已提交读
- 不可重复读,在一个事务中,前后读取的数据信息可能不一致,也是破坏了数据一致性。
- 可重复读
- 重点介绍,也是
MYSQL innodb引擎默认的隔离级别
。不同数据库的默认隔离级别也可能不相同。
- 串行化
- 多个事务操作,排队执行,类似于单线程操作,性能极差。很少使用。
- 一致性
- 隔离性
- 原子性
- 持久性
- 事务隔离级别要实际解决的问题
- 脏读
脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了不一定最终存在的数据,这就是脏读。 - 幻读?存疑?!
A事务
在本次事务中,对自己未操作过的数据进行了多次查询,第一次读取时的数据不存在,第二次读取时,记录出现了。(破坏了一致性,insert
)。 - 不可重复读
A事务
在本次事务中,对自己未操作过的数据,进行了多次读取,结果出现了不一致、或者记录不存在的情况(破坏了一致性,update OR insert
) 。
网友评论