频道栏目
首页 > 资讯 > MySQL > 正文

数据库事务及mysql隔离级别知识讲解

18-03-31        来源:[db:作者]  
收藏   我要投稿

数据库要好好学!还有操作系统啥的。

啥是事务

我面试时这样说的:为了缓存一系列CRUD操作,进行读写分离,如果你想要这系列操作,就update了,如果不要,就回滚了。其实我忘了,我真的忘了。百度了下,发现就是CRUD操作的集合,任何查找或者修改数据库的操作,都是事务的一个单元。

事务其目的呢

提供了数据库从失败恢复到正常状态的办法,也就是事务穿透,这一点安卓中都有许多的应用场景。

在多线程并发访问的时候,提供一个隔离方法,防止各自的操作各自干扰

读写分离的思想

这就是读写分离嘛!在cas乐观锁中,他也是把i++操作(举个auto integer的例子)压缩成了一条机器指令;也和okhttp的缓存日志系统一样,只对dirty状态的日志进行crud;也和copy on write arraylist一样,复制一个新容器,对新容器操作。

回滚的思想

fragment碎片就维护着一个碎片record。

例子

1、从A账号中把余额读出来(500)。

2、对A账号做减法操作(500-100)。

3、把结果写回A账号中(400)。

4、从B账号中把余额读出来(500)。

5、对B账号做加法操作(500+100)。

6、把结果写回B账号中(600)

这个作为一个原子操作,即事务。

一致性就是A减了100,B也要加100,不能加50。

隔离性我认为就是一个并发的情形

持久性就是操作了数据库后,数据发生了永久的改变

不考虑隔离性带来的后果:

1.脏读

一个事务修改值的事务,未提交,这个修改的过程中另一个读取值的事务进行了读取,一旦前面一个发生了回滚,就成了脏读。

2.不可重复读

一个事务第一次读一个值,间隔一段时间后再次读取了这个值,在这个间隔中,另一个事务对这个值进行了修改并提交。

3.幻读

一个事务第一次读若干行,间隔一段时间后再次读取若干行,在这个间隔中,另一个事务在这若干行中插入或者删除或者修改了一行并提交。其本质是数据集的改变。

mysql提供的4个隔离级别

① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。相当于锁住整个表。

② Repeatable read (可重复读):可避免脏读、不可重复读的发生。(mysql默认的)

③ Read committed (读已提交):可避免脏读的发生。

④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

相关TAG标签
上一篇:在接口开发中,BeanUtils.copyProperties的使用介绍
下一篇:KLara project:分布式YARA恶意软件扫描系统
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站