ACID特性分为四方面:原子性、在一致性、隔离性、持久性
1、原子性:事物是最小的执行单位,与原子相似,都是不可分割的。事务的原子性确保动作要么全部完成,要么完全不起作用;
2、一致性:执行事务前后,数据始终保持一致;
3、隔离性:在并发访问数据库时,一个用户的事务不会被其他事务所访问,每个并发事务之间数据库是相互独立的;
4、持久性:一个事务提交之后。它对数据库中数据的改变是持久的,尽管数据库发生故障数据也不会受到影响。
前提是要保证原子性、隔离性、持久性才能保障一致性。
并发事务带来哪些问题?
会导致脏读、不可重复读、幻读。
1、脏读:当一个事务能够访问到另一个事务未提交的数据并且对此数据进行修改。此时另外一个事务读到的这个数据就是“脏数据”。
2、不可重复读:指在一个事务多次访问同一块数据。也就是说一个事务的访问还没有结束,另一个事务就开始对这块数据进行访问。那么,在第一个事务的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不一样。这就发生了一个事务内两次独到的数据不一样的情况,这种情况叫做不可重复读。
3、幻读:与不可重复读类似。它发生在一个事务读取了几行数据,接着另一个事务插入了一些数据时,在随后的查询中,第一个事务就会发现多了一些不存在的记录,好像产生了幻觉一样,所以叫做幻读。
事务的隔离级别有哪些?
SQL标准定义了四个隔离级别:
1、读未提交:最低的隔离级别,允许读取尚未提交的数据,很容易产生脏读、幻读、不可重复读问题。
2、读已提交:允许读取已提交的数据,在读未提交的基础上解决了脏读的问题,但是幻读和不可重复读还是没有解决。
3、可重复读:对同一一段的多次读取结果必须是一致的,除非数据时被本身所修改,可以防止不可重复读问题,但幻读还是有可能发生。
4、串行化:最高的隔离级别,完全服从ACID的隔离级别,所有的事务依次执行,这样事务之间就完全不可能产生干扰,也就是说会完全解决脏读、幻读、不可重读的问题。