一、事务的四个特征
1、原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
2、一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
3、隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
4、持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的。
二、事务的并发问题
1、脏读:事务A读取到事务B已经修改但尚未提交但数据,如果事务B回滚,则事务A读取的为脏数据。不符合一致性。
2、不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了修改并提交,导致事务A多次
读取同一数据时,结果不一致。不符合隔离性。
3、幻读:事务A读取到事务B提交的新增或删除后的数据。不符合隔离性。
注意:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。
三、事务的隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
未提交读(Read uncommitted) | No | No | No |
已提交读(Read committed) | Yes | No | No |
可重复读(Repeatable read)InnoDB默认级别 | Yes | Yes | No |
可串行化(Serializable ) | Yes | Yes | Yes |
############################################ | ####### | ######### | ###### |
Yes:解决 No:未解决