一次把 MySQL 的 事务的 ACID 特性, 事务的隔离级别 掰开了,嚼碎了

ACID

原子性/一致性/隔离性/持久性

原子性:就是多个数据库操作组成一个完整不可分割的事务,需要事务中全部的命令执行成功后才可以成功提交事务,哪怕事务中有一条命令执行失败,则整个事务中的命令都会回滚,命令全部执行失败;

一致性:我的理解是一致性 指的是逻辑上 的一致性,保证逻辑的自洽 比如说 操作日志 与 数据库状态就需要在逻辑上一致,比方说操作日志是有账户增加金额的记录,可是数据库状态上的金额却没有增加,这样就是不一致;

持久性:就是数据库数据存到硬盘中去;

隔离性:并发状况下,多线程同时需要操作共同数据的时候,线程之间彼此隔离,保证数据安全,不会线程之间相互干扰;

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

四种隔离级别

读未提交  脏读(其实就是没有做隔离);

读已提交  不会脏读,读到的数据是实时的,

这里有一个问题:

在一个事务开启 这个事务还未提交之前,重复读的数据可能会被其他线程上的事务干扰,造成重复读取的数据不一致,

这种情况可能会对我这个事务中的一些操作产生干扰;

可重复读 我一个事务开启 ; 在事务提交之前,相同的查询语句得到的结果是一致的,是逻辑上一致的(如果我自己事务中对这个数据做了更改,我自己知道),

      注意 即使 即使 此时此刻 数据库硬盘里的数据已经被更改了, 我这个事务在未提交之前都不会受到影响;

      这样安排的好处,是我自己在我自己的事务中在这个程度的隔离下  是不会受到外界影响;

      这也是MySQL数据库默认的隔离级别;

正是因为我这个事务中不受到外面的干扰,所以在此基础上可能会产生  虚读  和  幻读(两耳不闻窗外事,一心只读圣贤书);

 

串行化 :所有事务是单线程的,执行完一个事务才可以执行下一个事务,这种隔离效果最好,性能实在太吃亏,一般不会使用这种策略;

原文地址:https://www.cnblogs.com/cjd01/p/14071318.html