mysql 事务ACID

事务4个特性

1,原子性

当前事务中所有sql,要么全部执行成功,要么全部不执行。

2,一致性

事务执行前后,不能破坏逻辑有一致性。

比如:A转账给B,A转出了,B转入时异常了。这样必须全部回滚,不然不符合一致性。也不符合原子性。这个操作应该是一个原子性的。

3,隔离性

隔离性涉及到事务的4个隔离级别。后面会说到。

4,持久性

事务一旦提交就不能被回滚。

 

事务隔离级别

1,读未提交read uncommited

事务A能读取到其他事务中修改的未提交的数据。如果这时其他事务回滚了,容易造成脏读。

eg:A要读取余额100,B这时做了一个扣款20,A读取到的就是80,但是后面B回滚了,余额还是100.这时A中读取到的80就是脏数据。

2,读提交read commited 

事务A能读取到其他事务修改的并提交的事务,但是会造成当前事务多次读取一个数据时数据不一致。造成不可重复读。

eg:A第一次读取余额100,这期间B做了扣款20,余额80,A再次读取同一条记录,数据变成80,造成不可重复读取。

3,可重复读 RR

在rc基础上通过行锁解决了不可重复读问题,但又出现了幻读(这个名字一直不太能接受),当前事务读取了数据行,另一个事务添加了新的数据,当前事务更新数据后,发现还有未更新的新出现的行,跟幻觉一样。叫幻读。

mysql的RR通过mvcc多版本并发控制解决了这个问题,所以mysql的默认RR级别可以说是实现了串行化,但性能又高于串行化的一个事务隔离级别。

4串行化

强制事务排序,在资源上加上共享锁,隔离性最好,性能最差,解决了幻读问题。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值