mysql MVCC ![image-20210813102852376](/Users/lindinghao/Library/Application Support/typora-user-images/image-20210813102852376.png) 可重复读级别下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
AQS原理详解 AQS 内部原理解析AQS 最核心的三大部分就是状态、队列和期望协作工具类去实现的获取/释放等重要方法。 state 状态第一个要讲解的是状态 state,如果 AQS 想要去管理或者想作为协作工具类的一个基础框架,那么它必然要管理一些状态,而这个状态在 AQS 内部就是用 state 变量去表示的。它的定义如下: 1234567/** * The synchronization sta 2019-08-09 #Java
线程池复用原理 线程池参数在ThreadPoolExecutor中共有七个参数: corePoolSize:核心线程数,核心线程会一直存活,即使没有任务需要执行(除非allowCoreThreadTimeOut参数设置为true,这样的话即使是核心线程也会被超时销毁); maximumPoolSize:线程池中允许的最大线程数; keepAliveTime:维护工作线程所允许的空闲时间,如果工作线程等待的时间超 2019-06-05 #Java