ACID
原子性/一致性/隔离性/持久性
原子性:就是多个数据库操作组成一个完整不可分割的事务,需要事务中全部的命令执行成功后才可以成功提交事务,哪怕事务中有一条命令执行失败,则整个事务中的命令都会回滚,命令全部执行失败;
一致性:我的理解是一致性 指的是逻辑上 的一致性,保证逻辑的自洽 比如说 操作日志 与 数据库状态就需要在逻辑上一致,比方说操作日志是有账户增加金额的记录,可是数据库状态上的金额却没有增加,这样就是不一致;
持久性:就是数据库数据存到硬盘中去;
隔离性:并发状况下,多线程同时需要操作共同数据的时候,线程之间彼此隔离,保证数据安全,不会线程之间相互干扰;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
四种隔离级别
读未提交 脏读(其实就是没有做隔离);
读已提交 不会脏读,读到的数据是实时的,
这里有一个问题:
在一个事务开启 这个事务还未提交之前,重复读的数据可能会被其他线程上的事务干扰,造成重复读取的数据不一致,
这种情况可能会对我这个事务中的一些操作产生干扰;
可重复读 我一个事务开启 ; 在事务提交之前,相同的查询语句得到的结果是一致的,是逻辑上一致的(如果我自己事务中对这个数据做了更改,我自己知道),
注意 即使 即使 此时此刻 数据库硬盘里的数据已经被更改了, 我这个事务在未提交之前都不会受到影响;
这样安排的好处,是我自己在我自己的事务中在这个程度的隔离下 是不会受到外界影响;
这也是MySQL数据库默认的隔离级别;
正是因为我这个事务中不受到外面的干扰,所以在此基础上可能会产生 虚读 和 幻读(两耳不闻窗外事,一心只读圣贤书);
串行化 :所有事务是单线程的,执行完一个事务才可以执行下一个事务,这种隔离效果最好,性能实在太吃亏,一般不会使用这种策略;