大家对于MySQL的ACID估计都是耳熟能详了吧,在这笔者还是稍微解释一下吧!
ACID指的就是事务的四个特性,分别如下:
-
原子性(Atomicity) :说白点就是一个动作还没完成是不能够被打断的。
-
一致性(Consistent) :指的是事务开始到结束,这期间所访问的数据必须保持一致。
-
隔离性(Isolation) :比如事务A正在操作,这时候事务B也要操作这行数据,那么事务B必须等到事务A结束之后才可以进行相关操作。
-
持久性(Durable) :指的是事务结束之后对于数据的修改是永久的,也就是数据库里面的数据也修改了。
既然事务的特性都比较特殊,那么在并发的条件下,就有可能发生各种问题,也就是平常大家所说的脏读、脏写、不可重复读以及幻读。接下来,笔者就用画图的形式来描述一下这四种问题的具体特点:
-
脏写:此时数据库的值为”数据0“,事务一、事务二和事务三同时对数据进行修改,并且修改成功了,但是只有一个事务能够得到自己修改的数据,其余的被覆盖更新了,这就是脏写。
-
脏读:此时数据库的值为”数据0“,事务二开始事务想要修改为”数据2“,但是还没提