MySQL事务
第一部分重点是事务隔离级别和各级别可能产生的问题。
1.事务定义
事务是指一系列操作的总和,如果其中某个操作失败的话,就会发生回滚,所有的事务都不执行。
2.事务正确执行的四个要素
ACID
原子性(atomicity):要么全部完成,要么全不完成。
一致性(consistency):在并发操作中,系统也必须如串行一样操作。主要特征是保护性和不变性,以多个账户相互汇款为例。
隔离性(isolation):同一时间只能有一个请求对数据进行操作。
持久性(durability):事务完成之后,更改会保持在数据库中。
3.事务隔离级别
分类 | 脏读 | 不重复读 | 幻读 |
---|---|---|---|
未提交读(read uncommited) | √ | √ | √ |
提交读(read commited) | √ | √ | |
可重复读(默认)(repeatable read) | √ | ||
可串行化(serializable) |
脏读:一个事务读取到了另一个事务未提交的数据。
不重复读:一个事务两次读取同一条数据的结果不同,通常是另一个事务的update操作对一条记录的修改导致的。
幻读:一个事务中,用同样的操作读取两次,得到的记录数不一样,通常是另一个事务的insert和delete操作导致的。MVCC解决幻读问题。