mysql事务(ACID)

一,原子性:

一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的状态,就像这个事务从来没有执行过一样。

例:在银行存钱时,要么全部存入银行,要么都没有存入,不会一半存入一般没有存入。

二,一致性:

在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

例:存钱以前你的钱是人民币,存完钱后也是人民币,不会变成美元或者别的。

三,隔离性:

数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

例:同一时间在银行取钱和存钱的人很多,但是都不会互相影响。

1)读为提交:已经写入数据,但是还没有提交。这种隔离可能会产生脏读。

脏读:在mysql中a往一张表中写入新的数据,但是不保存,过一会取消写入这条数据,在a创建和取消的这段时间里b在这张表中可以读到这条数据,称之为脏读。意思是我a虽然写入数据,但是没有保存,然后撤销了写入的数据,b能看到,但是当a撤销以后,数据就会丢失。

2)读提交:写入数据并提交。可能会产生不可重复读。

不可重复读:当a现在查看表里的数据以后,现在想显示出某些数据的平均值,在这期间b向表里写入新的数据,此时表中的数据已经更改,而a完全不知道,但是算平均值时会加上b新写入的数据,这就造成了a查看平均数时与自己算的结果不一样的情况。

a查表:10  6  7  5   平均值应该为7

b写入:12    

表中数据:10  6  7  5  12  平均值8

此时a求平均值:显示8,与a查表时应该得到的平均值不一样。

3)可重复读:可以重复读到数据。可能会产生幻读。

幻读:当a和b同时查看表时发现没有c这个数据,此时a先向表中添加c这条数据,并保存。b这边查完以后向表中添加数据c,但是会显示已有这个数据,无法添加,此时产生幻读。因为a已经写入数据,而b此时已经接收到了数据,只是没有显示出来,此时就好像b已经读到了数据一样。

4)串行化:当a准备向表中添加数据时,其他人就不能操作这张表,等a操作完以后其他人才可以操作这张表。

四,持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

例:你在银行存钱的时候,刚存完断电了,下次去查看的时候钱还在,不会丢失。

总结:隔离等级越高,性能越低,mysql默认使用的隔离等级是可重复读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值