图文学习MySQL的事务并发问题

  大家对于MySQL的ACID估计都是耳熟能详了吧,在这笔者还是稍微解释一下吧!

       ACID指的就是事务的四个特性,分别如下:

  • 原子性(Atomicity) :说白点就是一个动作还没完成是不能够被打断的。

  • 一致性(Consistent) :指的是事务开始到结束,这期间所访问的数据必须保持一致。

  • 隔离性(Isolation) :比如事务A正在操作,这时候事务B也要操作这行数据,那么事务B必须等到事务A结束之后才可以进行相关操作。

  • 持久性(Durable) :指的是事务结束之后对于数据的修改是永久的,也就是数据库里面的数据也修改了。

       既然事务的特性都比较特殊,那么在并发的条件下,就有可能发生各种问题,也就是平常大家所说的脏读、脏写、不可重复读以及幻读。接下来,笔者就用画图的形式来描述一下这四种问题的具体特点:

  • 脏写:此时数据库的值为”数据0“,事务一、事务二和事务三同时对数据进行修改,并且修改成功了,但是只有一个事务能够得到自己修改的数据,其余的被覆盖更新了,这就是脏写。

    图文学习MySQL的事务并发问题_第1张图片

  • 脏读:此时数据库的值为”数据0“,事务二开始事务想要修改为”数据2“,但是还没提交,这是事务一和事务三进行查询的操作,得到的返回值竟然是事务二想要修改的值,如果事务二这时候进行事务回滚操作,那么其余两个事务得到的值就是错误的了,这就是脏读。

    图文学习MySQL的事务并发问题_第2张图片

  • 不可重复读:此时数据库的数据为”数据0,数据2,数据3“,然后事务一进行查询操作,事务二和事务三进行修改数据的操作,修改完之后,事务一又再一次读取操作,这次读取到的数据跟第一次读取的数据不一样,这就是不可重复读。

    图文学习MySQL的事务并发问题_第3张图片

  • 幻读:幻读最容易跟不可重复读混乱了,它们的区别关键在于添加数据。此时数据库的数据为”数据0“,事务一第一次读到”数据0“,接着事务二和事务三进行添加”数据2“和”数据3“,这是事务一再一次进行读取操作,读到的数据跟第一次不一样,这就是幻读。

    图文学习MySQL的事务并发问题_第4张图片

你可能感兴趣的:(MySQL进阶刨析,mysql,数据库,sql)