范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

MySQL事务的12连问,你顶得了嘛

  1. 什么是数据库事务?
  事务,由一个 有限的数据库操作序列 构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。
  假如A转账给B 100 元,先从A的账户里扣除 100 元,再在 B 的账户上加上 100 元。如果扣完A的100元后,还没来得及给B加上,银行系统异常了,最后导致A的余额减少了,B的余额却没有增加。所以就需要  事务  ,将A的钱回滚回去,就是这么简单。  2. 事务的四大特性
  原子性:事务作为一个整体被执行,包含在其中的对数据库的操作要么全部都执行,要么都不执行。 一致性:指在事务开始之前和事务结束以后,数据不会被破坏,假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的。 隔离性:多个事务并发访问时,事务之间是相互隔离的,一个事务不应该被其他事务干扰,多个并发事务之间要相互隔离。 持久性:表示事务完成提交后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。 3. 事务的隔离级别有哪些?MySQL的默认隔离级别是什么?
  事务的隔离级别有四种,分别是:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable)。 读未提交隔离级别 :只限制了两个数据不能同时修改,但是修改数据的时候,即使事务未提交,都是可以被别的事务读取到的,这级别的事务隔离有脏读、重复读、幻读的问题;读已提交隔离级别 :当前事务只能读取到其他事务提交的数据,所以这种事务的隔离级别解决了脏读问题,但还是会存在重复读、幻读问题;可重复读:  可重复读隔离级别,限制了读取数据的时候,不可以进行修改,所以解决了重复读的问题,但是读取范围数据的时候,是可以插入数据,所以还会存在幻读问题;串行化:  事务最高的隔离级别,在该级别下,所有事务都是进行串行化顺序执行的。可以避免脏读、不可重复读与幻读所有并发问题。但是这种事务隔离级别下,事务执行很耗性能。
  Mysql默认的事务隔离级别是 可重复读 (RR)。 4. Mysql为什么选择RR作为默认隔离级别?
  我们知道Mysql有四种数据库隔离级别,分别是 读未提交、读已提交、可重复读、串行化 。而读未提交隔离级别太低了, 会有脏读问题 ,串行化隔离级别太高了, 会影响并发读 。那么就剩下读已提交(RC)和可重复读(RR)了。
  那么, Mysql为什么会选择RR作为默认隔离级别呢?
  我们的MySQL数据库一般都是集群部署的,会有主库、从库。主库负责写,从库负责读。主库写入之后,会进行主从复制,把数据同步到从库。
  从库是在主库拿到bin log日志,并执行bin log,从而保证从库与主库的数据一致性。
  实际上, bin log 有三种格式,分别是statement,row和mixed 。如果是statement 格式,bin log 记录的是SQL 的原文。Mysql早些时候,bin log 日志格式只有statement 这种,在RC的隔离级别,可能出现数据不一致的问题。
  MySQL官网上还记录了这个bug。
  我们可以复现这个bug,假设有表结构如下:    CREATE TABLE t (       a int(11) DEFAULT NULL,       b int(11) DEFAULT NULL,       KEY a (a)     ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  插入两条数据 insert into t values(666,2),(233,1);
  执行以下这两个事务:
  执行完之后,因为事务的隔离级别是 RC ,所以事务A在更新时,会对 b=2 加行级锁,所以执行结果为(888,2) ,事务B在执行时,不受行级锁的影响,两条数据变为(888,2),(233,2) 。
  在RC隔离级别下,我们再来看下 bin log 日志。当两个事务执行完后,会先记录事务B的bin log 日志,因为它最先提交,然后才生成事务A的bin log 日志。当bin log 日志格式是statement ,binlog记录的就是原文,也就是先记录update t set b=2 where b = 1; ,然后才记录update t set a=888 where b=2 。
  酱紫的话,当主库把 binlog 同步到从库,执行SQL 回放后,数据库中的数据就变成了(888,2)和(888,2) ,主数据库和从数据库数据不一致啦。而在RR(可重复读的数据库隔离级别) 下,因为会有间隙锁的存在,这种情况就不会发生,因此,Mysql默认选择RR 作为隔离级别。5. 很多大厂为什么选择RC数据库隔离级别?
  互联网大厂和一些传统企业,最明显的特点就是高并发。那么大厂就 更倾向提高系统的并发读 。
  RC 隔离级别,并发度是会比RR 更好的,为什么呢?
  因为RC隔离级别,加锁过程中,只需要对修改的记录加行锁。而RR隔离级别,还需要加 Gap Lock 和Next-Key Lock ,即RR隔离级别下,出现死锁的概率大很多。并且,RC 还支持半一致读 ,可以大大的减少了更新语句时行锁的冲突;如果对于不满足更新条件的记录,就可以提前释放锁,提升并发度。一致性读:又称为快照读。快照即当前行数据之前的历史版本。快照读就是使用快照信息显示基于某个时间点的查询结果,而不考虑与此同时运行的其他事务所执行的更改。
  当前读: 当前读的规则,就是要能读到所有已经提交的记录的最新值。
  半一致性读:一条update语句,如果 where 条件匹配到的记录已经加锁,那么InnoDB会返回记录最近提交的版本,由MySQL上层判断此是否需要真的加锁。  6. 并发场景,数据库存在哪些一致性问题?脏读:如果一个事务读取到了另一个未提交事务修改过的数据,我们就称发生了脏读现象。 不可重复读:同一个事务内,前后多次读取,读取到的数据内容不一致 幻读:如果一个事务先根据某些搜索条件查询出一些记录,在该事务未提交时,另一个事务写入了一些符合那些搜索条件的记录(如insert、delete、update),就意味着发生了幻读。 丢失更新:事务A和事务B都对同一个数据进行修改,事务A先修改,事务B随后修改,事务B的修改覆盖了事务A的修改。 7. 四大隔离级别,都会存在哪些并发问题呢?
  隔离级别脏读不可重复读幻读  读未提交(RU)√√√ 读已提交(RC)×√√  可重复读(RR)××√ 串行化(Serializable)×××  在RU隔离级别下,可能发生脏读、不可重复读、幻读现象。 在RC隔离级别下,可能发生不可重复读、幻读现象。 在RR隔离级别下,可能发生幻读现象。 在Serializable隔离级别,会强制事务串行执行, 不会 存在脏读、不可重复读、幻读现象。8. MySQL的隔离级别是如何实现的?
  MySQL的隔离级别是通过MVCC和锁机制来实现的。 RU隔离级别最低,没有加锁,存在脏读问题。事务读不加锁,不阻塞其他事务的读和写 RC和RR隔离级别可以通过 MVCC 来实现。串行化是通过 锁机制 实现。读加共享锁,写加排他锁,读写互斥。如果有未提交的事务正在修改某些行,所有select这些行的语句都会阻塞。9. 什么是MVCC,它的底层原理?
  MVCC ,即Multi-Version Concurrency Control (多版本并发控制)。它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问.
  通俗的讲,数据库中同时存在多个版本的数据,并不是整个数据库的多个版本,而是某一条记录的多个版本同时存在,在某个事务对其进行操作的时候,需要查看这一条记录的隐藏列事务版本id,对比事务id并根据事物隔离级别去判断读取哪个版本的数据。
  要了解MVCC的底层原理,需要回顾很多相关知识点,我们按以下小提纲,来分析哈: 什么是快照读和当前读 隐式字段 什么是Undo Log 什么是快照版本链 事务版本号 什么是Read View 查询一条记录,基于MVCC,是怎样流程 基于MVCC,RC隔离级别,存在不可重复读问题的分析 9.1 什么是快照读和当前读快照读:读取的是记录数据的可见版本(有旧的版本)。不加锁,普通的select语句都是快照读。 当前读:读取的是记录数据的最新版本,显式加锁的都是当前读。
  快照读 是MVCC实现的基础。 9.2 隐式字段
  对于 InnoDB 存储引擎,每一行记录都有两个隐藏列trx_id、roll_pointer ,如果表中没有主键和非NULL唯一键时,则还会有第三个隐藏的主键列row_id 。9.3 什么是Undo Log
  undo log,回滚日志,用于记录数据被修改前的信息。在表记录修改之前,会先把数据拷贝到undo log里,如果事务回滚,即可以通过undo log来还原数据。
  可以这样认为,当 delete 一条记录时,undo log 中会记录一条对应的insert 记录,当update 一条记录时,它记录一条对应相反的update 记录。
  undo log 有什么用途呢?事务回滚时,保证原子性和一致性。 用于MVCC快照读。 9.4 快照版本链
  多个事务并行操作某一行数据时,不同事务对该行数据的修改会产生多个版本,然后通过回滚指针(roll_pointer),连成一个链表,这个链表就称为版本链。如下:
  9.5 事务版本号
  事务每次开启前,都会从数据库获得一个自增长的事务ID,可以从事务ID( trx_id )判断事务的执行先后顺序。这就是事务版本号。9.6 什么是Read View
  Read View是什么呢?它就是事务执行SQL语句时,产生的读视图。实际上在innodb中,每个SQL语句执行前都会得到一个 Read View 。它主要是用来做可见性判断的,即判断当前事务可见哪个版本的数据~
  在 Read View 中,有这几个重要的属性。m_ids:当前系统中,那些未提交的读写事务ID列表。 min_limit_id:表示在生成Read View时,当前系统中活跃的读写事务中最小的事务id,即m_ids中的最小值。 max_limit_id:表示生成Read View时,系统中应该分配给下一个事务的id值。 creator_trx_id: 创建当前Read View的事务ID
  Read view 匹配条件规则(很重要)如下: 如果数据事务ID  trx_id < min_limit_id ,表明生成该版本的事务在生成Read View前,已经提交(因为事务ID是递增的),所以该版本可以被当前事务访问。如果 trx_id>= max_limit_id ,表明生成该版本的事务在生成Read View后才生成,所以该版本不可以被当前事务访问。如果  min_limit_id =
福建这3种另类小吃,本地人当作心头爱,外地人甚至没听说过说到福建小吃,外地人大多都会想到家附近的那家沙县小吃,似乎没去过福建的人们,基本上都是从这个地方开始了解的。其实福建的小吃非常多,除了开在全国各地的那个小吃店。还有很出名的,比如沙知名名媛出席富婆聚会!被曝脚踏两只船,外貌不断升级变网红脸本文编辑剧透社issac未经授权严禁转载,发现抄袭者将进行全网投诉香港知名男星TVB前艺人魏骏杰的前妻,被外界誉为知名名媛的张利华,最近几年可以说热议度颇高。除了当年和魏骏杰离婚闹女神变脸没人敢认?42岁未婚被封疯批美人,童年滤镜碎了一地猜猜这是谁关之琳?倪虹洁?温峥嵘?那英?熊黛林?苏芒?马苏?还是章小蕙?都不是哈,这是叶璇!该怎么形容看到这张动图的震撼呢大概就是忍不住反复确认艺人的名字。不知道是不是滤镜开过头,年过半百的王菲更美了,穿白色的服装,搭配出清爽高级的美选白色的服装有很多优势,关注我一段时间的人都会发现,我总是会分享好看的白色服装穿搭,例如帅气的白色服装优雅的白色服装等等,都有高级还年轻的效果。所以当小编看到了王菲的这套白色服装搭Rita女神地位不保?LOL手游昂哥兔女郎cos大获全胜,子琪更给力喜欢看LPL比赛的玩家想必除了对选手比较熟悉之外,对于解说和主持人也都很熟悉的了,其中在LPL拥有女神之称的莫过于混血脸蛋的rita,当年她一上线就吸引大批玩家,不仅声音好听,身型骗取188名老人1800多万元,套路分几步?免费发放米面油吸引老人入会,许以高额返利诱骗老人投资为掩人耳目,出动宝马车接待,组织东南亚旅游,经常农家乐吃喝这些都是针对老年人的诈骗团伙的惯用套路。海口市中级人民法院日前审理了两LOL新英雄虚空女皇符文出装套路全解析12。11版本虚空女皇卑尔维斯(后续称魔鬼鱼)上线,出装和符文都还没有固定的套路,先从技能分析,再逐一分解。先简单分析每个技能的作用,后续作总结。被动技能使用技能后可以增加下2次的江西老板开面馆,面条只卖1元钱,反倒月赚20万,套路给你今天要给大家带来的案例是江西有这么一家面馆,老板利用面条只卖1元钱,不仅不亏,反而在短短一个月的时间里,疯狂盈利20万。1案例背景这家面馆的老板姓胡,而这位胡老板呢,就是今天要给大2018年,金立集团创始人刘立荣,一把输掉7亿美金赌场套路多深再赌最后一把,输赢就这了,再也不赌了。2018年的某一天,塞班岛一家赌场的牌桌上,一个中年男人眼睛通红,他扫了一眼桌上的筹码,想了想,全推了出去。结果呢?后来有记者采访这个男人,男从7000万人到4亿人,清朝出现人口爆炸式增长,什么原因导致的?清朝入关的时候,人口就只有7000万,结果后来清朝灭亡的时候却突然增长到了4亿人,这中间都发生了什么事?又是什么原因导致的?当然,清朝从建立到灭亡一共经过了296年,人口增长也不是金铲铲S7七人口轻松追三星五费,星界龙之徽因过于强势被移除在S7巨龙之巢版本中,星界龙就和S6赛季中的约德尔差不多,可以轻松追三星,因为每刷五次商店,就能出现大量星界龙中的英雄。不过,有所区别的是,约德尔人全员三星之后可以召唤维迦,而星界
她医学院毕业,毕业就结婚,丈夫是国家主席,孩子都是国家栋梁很多人都愿意为自己的另一半付出,所有人都说,每一个成功的男人背后,都有一个女人默默地付出着。就连开国元勋们,李先念的背后都站着这样一个女人,那就是林佳楣。林佳楣不仅是李先念的妻子,酒小白(六)藏酒购买渠道一定要正规新手切记中国的白酒,绝大部分流通在熟人领域,除了口粮自饮外,主要有三种商务活动用酒,送礼人情往来,婚丧嫁娶提名宴。往往这几种用酒量采购量比较大,假酒是最为泛滥的,不是危言耸听。通常,在遇到大批乱港头目突然认罪,相关案情披露令人触目心惊,盖子即将打开突如其来的认罪,让香港社会震惊之余也感到意外。据央视新闻8月18日消息,香港非法初选活动涉嫌违反港区国安法一案在西九龙裁判法院再次开庭聆讯。47名被抓的乱港头目中,有戴耀廷黄之锋胡17部门联合发文鼓励生三孩,能打动得了你吗?国家卫生健康委国家发展改革委等17部门8月16日发布指导意见,意见要求,深入实施一对夫妻可以生育三个子女的政策及配套支持措施,完善和落实财政税收保险教育住房就业等积极生育支持措施,澳大利亚态度骤变,坚持并重申一中原则,正式表明态度澳大利亚的新任国防部长马尔斯突然改变对华态度,居然要拉着美国一起坚持一个中国原则,这是怎么回事呢,最近澳洲的媒体称,奥方副总理马尔斯称,澳大利亚坚持一个中国原则,而就在几天以前,他借机上位成赌王,却用3000万打发恩人崩牙驹,洗米华被捕是报应?号称澳门小赌王的周焯华涉案金额竟高达6800亿人民币6800亿什么概念?相当于32万个爽子根据2021年GDP这是中国名城绍兴一年的体量比扬州石家庄一年GDP还高大约相当于507个品牌新里程碑能成行业领路人吗?理想L9正式下线日前,行车视线从理想汽车官方获悉,理想L9已于8月18日正式从理想常州工厂下线,并即将开启全国交付。此前新车已于6月21日发布,仅推出一款Max版配置,指导售价45。98万元,并于斗罗宁荣荣的第八魂技有多bug?需要9个第9魂技才能破解在斗罗大陆动画中,如果问你谁的防御力最厉害,你可能第一个想到的是小舞,毕竟小舞拥有无敌金身。然而,无敌金身也是存在限制条件的,如果对方的力量过于强大,无敌金身的防御达到上限,也会破本科生隐瞒学历进厂打螺丝随着我国经济的快速发展,教育事业也相应地兴起。许多行业应该处于供不应求的状态,但是有些本科生低着眼神,傲慢而自大,根本看不到个人工作。每个人都应该放弃过时的观念,不要低估所有职位,贵州有4座被低估的避暑县城,人少景美消费低,适合夏天旅居小住今年的夏天是近二十年来最热的一年,中国南方没完没了的酷暑,让无数的人们都在寻找清凉的地方避暑。贵州是国内著名的凉都,夏季的平均气温只有23,是地球上同纬度最凉爽的区域之一,据大数据红了800多年,朱熹有怎样传奇的一生?朱熹是中国历史上著名的思想家哲学家教育家。他致广大,尽精微,综罗百代,是继孔孟之后,中国儒学最著名的代表人物。朱熹融合儒释道三教,并加以时代的改造和创新,集宋代新儒学之大成,对中国