刷新
2026-11-08 悲观锁 vs 乐观锁:余额 100 怎么会变成 110

博主头像 两个线程各往账户里加 10 块钱。加起来应该是 120。跑完是 110——少了 10 块,而且没有任何报错。 一、先看它是怎么少的 初始余额 100,两个线程都做同一件事:读余额、加 10、写回。 A. 不加任何锁 T1 读到 balance=100 T2 读到 balance=100 T2 写入 ...

2026-10-30 JOIN 的执行方式:一次连接到底扫了多少遍

博主头像 本机没装 MySQL,所以这篇用的是 Python 自带的 SQLite。它是个真数据库,有真优化器,能看到真的查询计划。两者优化器不同,但 JOIN 的底层是同一件事,后面会说清楚哪部分是 SQLite 特有的。 一、JOIN 的本质 不管哪种连法,骨架都是同一个: 对左表的每一行: 去右表里找到 ...

2026-10-25 索引为什么是 B+ 树:自己实现一棵量了一下

博主头像 数据库课讲索引必提 B+ 树,理由通常是"矮"和"适合范围查询"。我自己写了一棵 B+ 树,再写一棵普通二叉搜索树,用同一个指标比:一次查询要读几个页。 一、先把参数定死 比之前得先说清楚假设,不然后面的数没意义。 InnoDB 一个页是 16KB。主键是 bigint,占 8 字节;页内指向子节点 ...

为什么所有数据库都在用B树?5分钟让你豁然开朗

博主头像 为什么数据库的索引几乎都是 B 树 在一张 1000 万行的表里按主键查一条记录,MySQL 通常在几毫秒内返回。我一开始以为这中间有什么取巧的缓存,后来才知道并没有:它只是没有傻到去扫全表,而是走了一条索引,而那条索引十有八九是一棵 B 树。 MySQL、PostgreSQL、SQLite、Mon ...

软删除和唯一索引冲突:把 deleted_at 加进唯一索引,为什么反而不唯一了

博主头像 软删除(逻辑删除)和唯一索引放在同一张表上,几乎是每个后端项目都会遇到的冲突:用户注销了账号,过两天想用同一个邮箱重新注册,结果插入报 Duplicate entry。因为那条"已删除"的记录还在表里,唯一索引可不管它删没删。 网上最常见的解法是"把 deleted_at 加进唯一索引"。这个解法有 ...

立体库自动化困局破解|易软通 WMS,自动化仓储的统一智慧大脑

博主头像 导语 不少制造企业斥资千万上线堆垛机、RGV、AGV 立体库设备,最后却陷入新痛点: 设备各自独立、数据互不互通,WCS 调度和业务单据脱节,人工还要二次录入;产线、原料仓、成品仓信息割裂,领料、入库全靠人工核对;设备空转、巷道拥堵、错存取货频发,重金投入的自动化硬件,只发挥不到一半效能。自动化立体 ...

mysql备份恢复详解

博主头像 概述 在实际生产环境中,我们要定期针对数据库做备份,避免误操作导致数据丢失没办法恢复。 mysql备份按照原理分为两种,分别是逻辑备份和物理备份。 逻辑备份: 将数据导出为 SQL 语句 优点:跨版本、跨平台、可编辑、可单库单表,所有版本通用 缺点:大数据量慢,因为是将语句导出为一条条sql 工具: ...

探秘InnoDB:搞懂它的内存、线程、磁盘与日志刷盘策略

博主头像 InnoDB通过精心设计的内存缓冲、异步后台线程、多层日志和灵活刷盘策略 你是否想过:MySQL的InnoDB引擎为什么能扛住高并发?它用什么魔法把数据“缓存”在内存?万一数据库崩溃,它又怎么保证数据不丢?今天,我们用图文并茂的方式,把InnoDB的里里外外拆给你看。 一、先看全景:一张图认识Inn ...

mysqldump 参数拾遗:在遗忘与铭记之间

mysqldump工具在灾备恢复、DB间数据同步(含Server实例间同步)、主从搭建等场景下都拥有一席之地。可以说,它是DBA常用工具之一,所以就要求我们对其参数真正的了解掌握,特别是一些常用容易搞混、忽略的参数。因而,对mysqldump 那些被忽略的“摆渡”指令,要常常“淘”出来,Review ...

逃离SQL丛林:实用主义的数据救赎

博主头像 Hi,数据分析圈的朋友们! 你是不是也经历过这样的场景: 老板问:"上周的复购率是多少?" 你查了A表,算出来是18%; 同事查了B表,说是23%; 运营同学从后台导出,又是20.5%…… 三个人,三个数,谁都没错,但就是对不上。 别慌,这不是你一个人的问题。今天咱们聊聊一个很多数据团队都 ...

2、SEATA分布式事务——AT模式

博主头像 SEATA的AT模式和XA模式一样,也是2阶段提交,但是AT模式没有利用数据库的XA协议,如下所示: 从上面的图可以看到,seata AT 模式分为以下5个步骤: ①、TM(事务管理器) 开启全局事务; ②、RM 向 TC(事务协调者) 注册分支事务; ③、RM(资源管理器,也就是要访问数据库的进程 ...

1、SEATA分布式事务——XA模式

博主头像 一、传统分布式XA事务的2PC 2PC 即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),2 是指两个阶段,P 是指准备阶段,C 是指提交阶段。常见的关系型数据库如 Oracle、MySQL 都支持两阶段提交协议,如下图: ...

mysql数据库事务的实现和XA事务

博主头像 一、事务的实现 1.1、事务的执行流程 根据上图,事务的执行流程如下: ①查询操作先从Buffer Pool中查询数据,若存在则直接输出,不存在则读取磁盘中的数据并放入Buffer Pool; ②在操作任何数据之前,会先将数据的旧值写入undo log日志文件中,以便执行事务过程中出现异常后好回滚到 ...