事务的四种特性
chapter one:原子性( Atomicity ) 白话来叙述的话就是 要么所有事情都成 要么一件都不成 即事务中包含的操作,要么所有操作都完成,要么就一件也不完成。
chapter two:一致性 ( Consistency )事务执行的结果必须是使数据库从原本的一个一致性状态转变为另一种一致性状态,因此,当数据库只包含成功事务提交结果的时候,就是说数据库处于一致性状态,如果数据库运行过程中发生有一些故障,有些事务尚未完成就被迫中断,这些未完成的事务对于数据库所做的一些修改有一部分已加入物理数据库,这时候的数据库就处于不正确的状态,或者可以称之为不一致的状态
chapter three:隔离性 ( Isolation )一个事务的处理过程中不能被其他的事务所干扰。即一个事务的内部操作以及对于数据的使用对其他并发事务是隔离的,并发执行的各个事务之间不能进行干扰。
chapter four:持续性 ( Durability )也可以称之为永久性,即一个事务的提交 对于相关的数据的影响是永久的,接下来的相关操作以及故障对数据不会造成任何影响。
MySQL的四种隔离级别
一、read uncommitted(读取未提交)
当处于该隔离级别的时候,任何事务都能看到其他未提交事务的结果,很少用于实际使用,读取未提交的事务 也被称之为脏读
二、read committed(读取已提交)
这是大多数数据库的默认隔离级别(MySQL默认的隔离级别不是这个),该隔离级别满足了隔离的简单定义:一个事务只能看到已经提交的事务的结果改变,该隔离级别也支持所谓的 Nonrepeatable read(可重复读)因为同一事务的其他实例可能在执行的过程中已经提交了结果,所以就会导致同一select会查询到不同的结果
三、repeatable read(可重复读)
这是MySQL的默认隔离级别
该隔离级别确保同一事务在多个实例中并发读取数据时,可以看到同样的数据行,不过,该隔离级别会导致另一种较为棘手的问题——幻读。顾名思义,幻读就是当用户读取到某一范围的数据行时,又一事务在该范围内又插入了新行,当用户再次读取该范围内的数据行时,就会出现“幻影”行,Innodb和Falcon通过多版本并发控制解决了该问题。
四、(Serializable)串行化
这是最高的隔离级别,该隔离级别会强制的给事务进行排序,使之不可能发生冲突,从而解决了幻读的问题。简而言之,他是在每个读取的数据行上加入了共享锁,在该级别,可能会碰到大量的超时现象和锁竞争。