mysql是怎么保证数据不丢的 只要 redo log 和 binlog 保证持久化到磁盘,就能确保 MySQL 异常重启后,数据可以恢复。 那么redo log 的写入流程是怎么样的,如何保证 redo log 真实地写入了磁盘? binlog 的写入机制其实,binlog 的写入逻辑比较简单:事务执行过程中,先把日志写到 binlog cache,事务提交的时候,再把 binlog cache 写到 binlog 文件中。 2022-08-02 #mysql
为什么选择B+树作为索引的数据结构 索引的本质 索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构 二叉树 红黑树 Hash表 B-Tree 索引的建立就是数据排序的过程 为什么二叉树不适合做索引 因为当数据在插入的数据,如果是排好序的,二叉树则会退化成链表,这样就失去了索引的意义。特别是自增主键,默认就是会建索引的。 为什么红黑树不适合做索引 因为红黑树是弱平衡树,如果插入的数据是排好序的,则只会单边增 2022-01-14 #mysql
mysql MVCC  可重复读级别下Q1为3,Q2为1 k这一行数据会有多个版本号,这个版本号就是每个事务的transa 2022-01-13 #mysql
mysql事务隔离 简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在 MySQL 中,事务支持是在引擎层实现的。你现在知道,MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。 隔离性与隔离级别当数据库上有多个事务同时执行的时候,就可能出现脏读(dirty read 2022-01-11 #mysql
一条sql更新语句是如何执行的? 一条更新语句的执行流程是怎样的呢? MySQL 可以恢复到半个月内任意一秒的状态,这是怎样做到的呢? 下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c: 123mysql> create table T(ID int primary key,c int); 如果要将 ID=2 这一行的值加 1,SQL 语句就会这么写: 1mysql> update T s 2022-01-11 #mysql
使用mycat分库分表 背景由于公司部分项目使用了mycat来做分库分表,所以就花了点时间了解一下mycat 配置下面是mycat主要配置文件 目录 说明 bin mycat命令,启动、重启、停止等 catlet catlet为Mycat的一个扩展功能 conf Mycat 配置信息,重点关注 lib Mycat引用的jar包,Mycat是java开发的 logs 日志文件,包括Mycat启动 2021-06-09 #mysql
链表环的入口数学原理 看一张简图。(图侵删) 假设: 从头节点到入口的距离为 ab。 从入口到相遇点的距离为 bc。 从相遇点到入口的距离为 cb。 则链表环的长度 = bc + cb。 那么快慢指针相遇时所走过的步数为: fast_step = ab + bc + n * (bc + cb) 【公式 1】 slow_step = ab + bc 【公式 2】 n 指的是 fast 2021-06-08 #coding
有序性、可见行、原子性问题 可见性在单核时代,所有的线程都是在一颗 CPU 上执行,CPU 缓存与内存的数据一致性容易解决。因为所有线程都是操作同一个 CPU 的缓存,一个线程对缓存的写,对另外一个线程来说一定是可见的。例如在下面的图中,线程 A 和线程 B 都是操作同一个 CPU 里面的缓存,所以线程 A 更新了变量 V 的值,那么线程 B 之后再访问变量 V,得到的一定是 V 的最新值(线程 A 写过的值)。 ![ima 2021-02-13 #Java
mysql DDL MySQL DDL 的原理简析1、copy 算法较简单的实现方法,MySQL 会建立一个新的临时表,把源表的所有数据写入到临时表,在此期间无法对源表进行数据写入。MySQL在完成临时表的写入之后,用临时表替换掉源表。这个算法主要被早期(<=5.5)版本所使用。 2、inplace 算法从 5.6 开始,常用的 DDL 都默认使用这个算法。inplace 算法包含两类:inplace 2020-11-21 #mysql
mysql自增主键存储以及不连续的原因 自增主键可以让聚集索引尽量地保持递增顺序插入,避免了随机查询,从而提高了查询效率 但实际上,MySQL 的自增主键并不能保证一定是连续递增的。 下面举个例子来看下,如下所示创建一张表: 自增值保存在哪里? 使用 insert into test_pk values(null, 1, 1) 插入一行数据,再执行 show create table 命令来看一下表的结构定义: 上述表的结构定义存放 2020-04-22 #mysql