事务的理解

mysql事务理解

事务是指对系统进行的一组操作,为了保证系统的完整性,事务需要具有ACID特性,具体如下:

1. 原子性(Atomic)

     一个事务包含多个操作,这些操作要么全部执行,要么全都不执行。

2. 一致性(Consistency)

     一致性是指事务使得系统从一个一致的状态转换到另一个一致状态。事务的一致性决定了一个系统设计和实现的复杂度。事务可以不同程度的一致性:

     强一致性:读操作可以立即读到提交的更新操作。

     弱一致性:提交的更新操作,不一定立即会被读操作读到,此种情况会存在一个不一致窗口,指的是读操作可以读到最新值的一段时间。

3. 隔离性(Isolation)

     并发事务之间互相影响的程度,比如一个事务会不会读取到另一个未提交的事务修改的数据。

4. 持久性(Durability)

     事务提交后,对系统的影响是永久的。

对于一致性的理解,要结合原子性和隔离性来看:

1、原子性和一致性的的侧重点不同:原子性关注状态,要么全部成功,要么全部失败,不存在部分成功的状态。而一致性关注数据的可见性,中间状态的数据对外部不可见,只有最初状态和最终状态的数据对外可见。

2、在未提交读的隔离级别下,会造成脏读,这就是因为一个事务读到了另一个事务操作内部的数据。ACID中是的一致性描述的是一个最理想的事务应该怎样的,是一个强一致性状态,如果要做到这点,需要使用排它锁把事务排成一队,即Serializable的隔离级别,这样性能就大大降低了。现实是骨感的,所以使用隔离性的不同隔离级别来破坏一致性,来获取更好的性能。

你可能感兴趣的:(事务的理解)