HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    mysql为什么默认可重复读

    发布时间:2023-04-08 16:40:08     稿源: 创意岭    阅读: 125        

    大家好!今天让创意岭的小编来大家介绍下关于mysql为什么默认可重复读的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    mysql为什么默认可重复读

    一、MySQL可重复读防止幻读

    接上篇 事务隔离级别和幻读 ,留了个坑,没想到竟然过了10天,时间不注意真的过的好快。顺便提下,图片链接是属于网站的,开发自己的图床迫在眉睫,万一哪天迁移就要做很多额外工作,一些概念或者思路用图片表达更直观清楚。

    回到正题,之前提到一般情况下MySQL的InnoDB引擎在可重复读的情况下是没法保证不出现幻读的,但实际情况是MySQL可以通过加锁来防止幻读的出现,这种锁定通过Next-key机制来实现,是属于记录锁和间隙锁(Gap锁)的结合。

    引申,行级别锁的三种算法:

    举个存在唯一索引和辅助索引的例子做说明:

    执行 select * from test where b = 3 for update

    存在两个索引,分别加锁,唯一主键列a加record lock , 辅助索引列b加next-key lock (1,3) 以及给下一个值的区间(3,6)加gap锁;

    因此在另一个事务里执行以下语句都会阻塞,具体分析:

    第一个阻塞因为加了唯一索引的record lock a = 5;

    第二个主键插入4,符合条件,但是根据辅助索引b 的范围, b = 2 在(1,3)中,同样阻塞;

    第三个a =6 不在主键a锁定范围,b = 5 也不在辅助索引b 的范围(1,3)中,但在另一个gap锁范围(3,6)中,因此也阻塞;

    这种锁定情形下,可以执行的包括类似语句:

    insert的特殊情况

    对于insert 会检查下一条记录是否被锁定,如上述例子有 select * from test where b = 3 for update 插入 insert into test select 2,2 会检测到b = 3 已经被锁定,而 insert into test select 2,0 可以执行;

    [1]:《MySQL技术内幕:InnoDB存储引擎》-第六章:锁

    二、MYSQL 那点破事!索引、SQL调优、事务、B+树、分表 ....

    大家好,我是Tom哥~

    为了便于大家查找问题,了解全貌,整理个目录,我们可以快速全局了解关于mysql数据库,面试官一般喜欢问哪些问题

    接下来,我们逐条来看看每个问题及答案

    MyISAM 和 InnoDB 的区别?

    答案:InnoDB 支持 事务、外键、聚集索引,通过MVCC来支持高并发,索引和数据存储在一起。InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数。

    InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁,并发能力低。MySQL 将默认存储引擎是 InnoDB

    mysql 锁有哪些类型?

    答案:mysql锁分为共享锁( S lock ) 、排他锁 ( X lock ),也叫做读锁和写锁。根据粒度,可以分为表锁、页锁、行锁。

    什么是间隙锁?

    答案:间隙锁是可重复读级别下才会有的锁,mysql会帮我们生成了若干 左开右闭 的区间,结合MVCC和间隙锁可以解决幻读问题。

    如何避免死锁?

    答案:死锁的四个必要条件:1、互斥 2、请求与保持 3、环路等待 4、不可剥夺。

    数据库的隔离级别?

    答案:读未提交、读已提交、可重复读(mysql的默认级别,每次读取结果都一样,但是有可能产生幻读)、串行化。

    Mysql有哪些类型的索引?

    答案:

    什么是覆盖索引和回表?

    答案:

    1、覆盖索引,指的是在一次查询中,一个索引包含所有需要查询的字段的值,可能是返回值或where条件

    假如我们创建了一个(money,buyer_id)的联合索引,索引的叶子节点包含了 buyer_id 的信息,则不会再 回表 查询。

    2、回表,指查询时一些字段值拿不到,需要到主键索引B+树再查一次。

    Mysql的最左前缀原则?

    答案:即最左优先,在检索数据时从联合索引的最左边开始匹配,直到遇到范围查询(如:> 、< 、between、like等)

    例子:where a = 1 and b = 2 and c > 3 and d = 4 ,如果建立(a,b,c,d)组合索引,d是用不到索引的;如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

    线上SQL的调优经验?

    答案:

    官方为什么建议采用自增id 作为主键?

    答案:自增id是连续的,插入过程也是顺序的,总是插入在最后,减少了页分裂,有效减少数据的移动。所以尽量不要使用字符串(如:UUID)作为主键。

    索引为什么采用B+树,而不用B-树,红黑树?

    答案:提升查询速度,首先要减少磁盘IO次数,也就是要降低树的高度。

    事务的特性有哪些?

    答案:ACID。

    如何实现分布式事务?

    答案:

    日常工作中,MySQL 如何做优化?

    答案:

    mysql 主从同步具体过程?

    答案:

    什么是主从延迟?

    答案:指一个写入SQL操作在主库执行完后,将数据完整同步到从库会有一个时间差,称之为主从延迟。计算公式:

    注意:不同服务器要保持时钟一致

    主从延迟排查方法?

    答案:通过 show slave status 命令输出的 Seconds_Behind_Master 参数的值来判断

    主从延迟要怎么解决?

    答案:

    如果数据量太大怎么办?

    答案:mysql表的数据量一般控制在千万级别,如果再大的话,就要考虑分库分表。除了分表外,列举了面对海量数据业务的一些常见优化手段

    分表后ID如何保证全局唯一呢?

    答案:分库分表后,多张表共用一套全局id,原来单表主键自增方式满足不了要求。我们需要重新设计一套id生成器。特点:全局唯一、高性能、高可用、方便接入。

    分表后可能遇到的哪些问题?

    答案:分表后,与单表的最大区别是有分表键 sharding_key ,用来路由具体的物理表,以电商为例,有买家和卖家两个维度,以 buyer_id 路由,无法满足卖家的需求,反之同样道理。如何解决?

    三、h4数据库默认事务隔离级别

    你好请问是问h4数据库默认事务隔离级别有什么吗?h4数据库默认事务隔离级别有四种。分别是读未提交、读已提交、可重复读、序列化,不同的隔离级别下会产生脏读、幻读、不可重复读等相关问题,因此在选择隔离级别的时候要根据应用场景来决定,使用合适的隔离级别。在实际的工作中很少做修改,一般都是使用默认的隔离级别:mysql默认为不可重复读,oracle为读已提交。

    四、2020-12-14:mysql中,可重复读是怎么实现的?

    MVCC多版本并发控制。

    以上就是关于mysql为什么默认可重复读相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    academy谐音记忆

    my花式英文字体(my花体字可复制)

    wechat翻译中文(mywechat翻译中文)

    浙江广聚汇贸易公司这么样(浙江广聚纸制品制造有限公司怎么样)

    杭州到广州国道怎么走(杭州到广州国道怎么走最方便)