一个事务是 只包含所有读/写操作成功的集合。
数据库的 ACID 特性:
 

Atomicity(原子性)

Consistency(一致性)
Isolation(隔离性)

Durability(持久性)

1.原子性:

原子性任务是一个独立的操作单元,是一种要么全部是,要么全部不是的 原子单位性操作。

2.一致性:

事务必须始终保持一致性的状态,不管单位时间内 事务并发数是多少。

  • 如果一个操作触发辅助操作(级联、触发器等),这些也必须成功,否则交易失败;
  • 如果系统是由多个节点组成,一致性规定所有的变化必须传播到 所有节点(主从复制)。如果从站节点是异步更新,那么需要 系统成为“最终一致性”;
  • 一个事务是数据状态的切换,因此,如果事务是多个并发,系统也必须如串行事务一样操作。

3.隔离性:

事务是并发控制机制,他们交错使用时也能提供一致性。隔离让我们隐藏来自外部世界未提交的状态变化,一个失败的事务不应该破坏系统的状态。
隔离是通过 悲观锁或乐观锁来实现的。

4.持久性

一个成功的事务将永久性的改变系统的状态,所以在它结束之前,所有导致状态的变化都会记录在一个持久的事务日志中。

如果系统突然崩溃,所有未完成已提交的事务可能会重演。

数据库的四个隔离级别

    隔离级别高的数据库的可靠性高,但并发量低,而隔离级别低的数据库可靠性低,但并发量高,系统开销小;从上倒下级别增高。

READ_UNCOMMITED

READ_COMMITED

REPETABLE_READ

SERIALIZABLE

mysql原子性如何保证_隔离级别

READ_UNCOMMITED:

    事务中的修改,即使没有提交,其他事务也可以看到,会引起"脏读”;这个隔离级别会引起很多问题,如无必要,不要使用;

READ_COMMITED:

    大多数数据库系统使用的级别,是指一个事务的开始,只能够看到已经完成的事务的结果;对正在执行的事务,无法被其他事务看到。 这个隔离级别会出现读取旧数据现象;

REPETABLE_READ:

    解决了“脏读”问题,保证了每行记录的结果一致性;但是无法解决另一个问题“幻行”,即是突然蹦出来的行数据;指的是某个事务在读取某个范围的数据,但是另一个事务游向这个范围的数据插入数据,导致多次读取的时候,数据的行数不一致;

SERIALIZABLE:

    是最高的隔离级别,通过强制事务串行操作(注意是串行),避免了前面的幻读情况,由于它大量加上锁,导致大量的请求超时,因此性能会比较低下;在特别需要数据一致性且并发量不需要那么大的时候,才可能考虑这个级别。

以下是主流数据库的默认隔离级别。

mysql原子性如何保证_事务_02