MySQL数据库
intimexy
这个作者很懒,什么都没留下…
展开
-
MySQL可重复度隔离级别的实现原理
1、原理MySQL默认的隔离级别是可重复读,即:事务A在读到一条数据之后,此时事务B对该数据进行了修改并提交,那么事务A再读该数据,读到的还是原来的内容。那么MySQL可重复读是如何实现的呢?使用的的一种叫MVCC的控制方式 ,即Mutil-Version Concurrency Control,多版本并发控制,类似于乐观锁的一种实现方式实现方式:InnoDB在每行记录后面保存两个隐藏的列来,分别保存了这个行的创建时间和行的删除时间。这里存储的并不是实际的时间值,而是系统版本号,当数...转载 2020-12-07 18:13:26 · 339 阅读 · 0 评论 -
面试小知识:MySQL索引相关
前言本模板主要是一些面试相关的题目,对于每一道问题,我会提供简单的解答,答案的来源主要是基于自己看了各方资料之后的理解,如果有错的,欢迎指点出来。1. 什么是最左前缀原则?以下回答全部是基于MySQL的InnoDB引擎例如对于下面这一张表如果我们按照 name 字段来建立索引的话,采用B+树的结构,大概的索引结构如下如果我们要进行模糊查找,查找name 以“张"开头的所有人的ID,即 sql 语句为select ID from table where name like '张...转载 2020-12-07 18:08:46 · 245 阅读 · 0 评论 -
MySQL 是如何保证一致性、原子性和持久性的
编辑:业余草 来源:https://www.xttblog.com/?p=4891 今天,我们来简单的看一下 MySQL 的一致性、原子性和持久性问题。后面还扩展了 15 个简单的面试题,希望大家喜欢! 1、Mysql怎么保证一致性的? OK,这个问题分为两个层面来说。 从数据库层面,数据库通过原子性、隔离性、持久性来保证一致性。也就是说ACID四大特性之中,C(一致性)是目的,A(原子性)、I(隔...转载 2020-12-07 18:04:43 · 1238 阅读 · 0 评论 -
Mysql分库分表方案
Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。 mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能...转载 2020-12-07 18:00:45 · 136 阅读 · 0 评论 -
mysql中InnoDB表为什么要建议用自增列做主键
InnoDB引擎表的特点 1、InnoDB引擎表是基于B+树的索引组织表(IOT) 关于B+树 (图片来源于网上) B+ 树的特点: (1)所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的; (2)不可能在非叶子结点命中; (3)非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层; 2、如果...转载 2020-12-02 16:51:07 · 320 阅读 · 0 评论 -
MySql分库分表方案
Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。 mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能...转载 2020-12-02 16:48:39 · 138 阅读 · 0 评论 -
MySql分库分表方案
垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。如下图,独立的拆分出订单库 和 用户库。 水平拆分的概念,是同一个业务数据量大之后,进行水平拆分。 上图中订单数据达到了4000万,我们也知道mysql单表存储量推荐是百万级,如果不进行处理,mysql单表数据太大,会导致性能变慢。使用方案可以参考数据进行水平拆分。把4000万数据拆分4张表或...转载 2020-12-02 16:45:46 · 335 阅读 · 0 评论 -
详解 MySql InnoDB 中的三种行锁(记录锁、间隙锁与临键锁)
前言 InnoDB 通过 MVCC 和 NEXT-KEY Locks,解决了在可重复读的事务隔离级别下出现幻读的问题。MVCC 我先挖个坑,日后再细讲,这篇文章我们主要来谈谈那些可爱的锁。 什么是幻读? 幻读是在可重复读的事务隔离级别下会出现的一种问题,简单来说,可重复读保证了当前事务不会读取到其他事务已提交的 UPDATE 操作。但同时,也会导致当前事务无法感知到来自其他事务中的 INSERT 或...转载 2020-12-02 16:42:59 · 1181 阅读 · 0 评论 -
MySql是如何解决幻读的?
MySql是如何解决幻读的? 一,前言: 事务的隔离级别有四种,读未提交,读已提交,可重复读和串行化,下面结合具体的问题,在mysql中,innodb引擎是怎么解决幻读的? 二,详情: 一张图胜过千言万语: 1, 什么是幻读? 2, 为什么要解决幻读? 3, mysql是怎么解决幻转载 2020-12-01 15:25:20 · 408 阅读 · 0 评论 -
如何保证Redis和MySQL双写数据一致性
1.MySQL持久化数据,Redis只读数据 redis在启动之后,从数据库加载数据。 读请求: 不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取 写请求: 数据首先都写到数据库,之后更新redis(先写redis再写mysql,如果写入失败事务回滚会造成redis中存在脏数据) 2.MySQL和Redis处理不同的数据类型 MySQL处理实时性数据,例如金融数据、交易数据Redis处理实时性要求不高的数据,例如网站最热贴排行榜,好友列表等在并发不高的情况下,读操作优转载 2020-12-01 15:19:28 · 579 阅读 · 0 评论 -
MySQL主从复制原理
为什么要做主从复制 在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运行。做数据的热备,主库宕机后能够及时替换主库,保证业务可用性。架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。 MySQL主从复制的流程 主库db的更新事件(update、ins.转载 2020-12-01 15:15:59 · 100 阅读 · 0 评论 -
数据库添加索引为什么能加快查询速度
首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合。如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。 MySQL官方对于索引的定义为:索引是帮助MySQL高效获取数据的数据结构。即可以理解为:索引是数据结构。我们知道,数据库查询是数据库最主要的功能之一,我们都希望查询数据的速度尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的转载 2020-11-06 18:34:11 · 2583 阅读 · 0 评论 -
sql语句大全
数据库操作查看所有数据库 show databases;1 查看当前使用的数据库 select database();1 创建数据库 create databases 数据库名 charset=utf8;1 5.删除数据库 drop database 数据库名1 6 .使用数据句库 use database 数据库名1 7.查看数据库中所有表 show tables;1 表的操作 1.查看表结构 desc 表名1 2.创建表结构的语法 create table转载 2020-10-19 17:55:38 · 43154 阅读 · 10 评论 -
关系型数据库与非关系型数据库的区别
当前主流的关系型数据库有Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL等。 非关系型数据库有 NoSql、Cloudant、MongoDb、redis、HBase等 一、关系型数据库 1.概念 关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系模式就是二维表格模型。 主要代表:SQL Server,Oracle,Mys...转载 2020-10-19 17:52:25 · 1334 阅读 · 0 评论 -
详细分析MySQL事务日志(redo log和undo log)
innodb事务日志包括redo log和undo log。redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作。undo log不是redo log的逆向过程,其实它们都算是用来恢复的日志:1.redo log通常是物理日志,记录的是数据页的物理修改,而不是某一行或某几行修改成怎样怎样,它用来恢复提交后的物理数据页(恢复数据页,且只能恢复到最后一次提交的位置)。2.undo用来回滚行记录到某个版本。undo log一般是逻辑日志,根据每行记录进行记录。1.re...转载 2020-10-18 19:36:45 · 6980 阅读 · 0 评论 -
轻松理解MySQL的MVCC实现机制
1.1 什么是MVCC MVCC是一种多版本并发控制机制。 1.2 MVCC是为了解决什么问题? 大多数的MYSQL事务型存储引擎,如,InnoDB,Falcon以及PBXT都不使用一种简单的行锁机制.事实上,他们都和MVCC–多版本并发控制来一起使用.大家都应该知道,锁机制可以控制并发操作,但是其系统开销较大,而MVCC可以在大多数情况下代替行级锁,使用MVCC,能降低其系统开销. 1.3 MVCC实现 MVCC是通过保存数据在某个时间点的快照来实现的. 不同存储引擎的MVCC. 不同存储引转载 2020-10-14 17:54:42 · 113 阅读 · 0 评论 -
正确的理解MySQL的MVCC及实现原理
MVCC多版本并发控制 如果觉得对你有帮助,能否点个赞或关个注,以示鼓励笔者呢?!博客目录 | 先点这里 !首先声明,MySQL的测试环境是5.7 前提概要 什么是MVCC什么是当前读和快照读?当前读,快照读和MVCC的关系 MVCC实现原理 隐式字段undo日志Read View(读视图)整体流程 MVCC相关问题 RR是如何在RC级的基础上解决不可重复读的?RC,RR级别下的InnoDB快照读有什么不同? 前提概要 什么是MVCC? MVCC MVCC转载 2020-10-13 18:47:35 · 121 阅读 · 0 评论