摘要:
注意,本篇内容针对MySQL,并且使用InnoDB存储引擎,其他存储引擎对于唯一索引空值的行为不在讨论范围内。 没注意过这个问题 唯一索引可以允许多个空值,并且你查询空值时还能用上索引?? 下面分析下它咋存的 我查看了下这个索引页的数据 把infimum和supremum之间的数据格式化一下,就是索 阅读全文
摘要:
事务是数据库中一个操作的最基本的单元,具有ACID特性。 原子性(A),事务是不可分割的,其中的操作要么都做了,要么都没做,不可能做一半。 一致性(C),事务在完成前数据库处于一致状态,完成后也要处于一致状态,事务不能打破数据库的一致性。 隔离性(I),事务看起来是被隔离的,即事务在提交之前,它对数 阅读全文
摘要:
latch和lock 我们讨论数据库理论中的锁,实际上大部分时间是在讨论lock。lock的对象是事务,用来加锁的对象是数据库、表、页、行等。 除了这些之外,数据库还需要对其自身的线程和内存中的数据结构进行并发控制,比如访问、刷新缓存列表中的页等,用来保证这些操作的并发正确性的工具就是latch。l 阅读全文
摘要:
InnoDB支持以下索引 B+树索引 散列索引 全文索引 其中,散列索引是由InnoDB自动创建的自适应哈希索引,人工无法干预。 我们最常见到的,也是大部分数据库系统都在用的索引类型就是B+树索引。 索引并不是越多越好,想要提升查询性能就要在更新性能上做一定的让步,我们需要在这两种性能之间寻找一个平 阅读全文
摘要:
索引组织表 InnoDB使用主键聚合索引,意思就是MySQL中的表是按照主键顺序在磁盘文件中存储的。 如果表没有主键: 判断表中有没有唯一非空索引,有则选中唯一非空索引中的第一个被定义的那个列来做聚合索引 如果条件1没有选出一个主键,那么自动创建一个6字节大小的指针来做聚合索引 关于隐藏列_rowi 阅读全文
摘要:
参数文件 my.cnf文件。 mysql --help | grep my.cnf命令显示了读取的顺序 参数类型 SHOW VARIABLES查看所有参数,一直到我这个版本一共有610个参数 参数分为运行期可以改变的动态参数和运行期不能改变的静态参数。通过SET可以设置这些参数。 @@global设 阅读全文
摘要:
MySQL体系结构和存储引擎 数据库和数据库实例 数据库:一组用于保存数据的物理操作系统文件或其他形式文件类型的集合。 实例:用于操作数据库文件。 如上命令显示/var/lib/mysql/就是我的MySQL数据库实例用来保存数据库文件的地方。 这里有一些文件夹,每一个文件夹都是一个数据库,我们随便 阅读全文
摘要:
说明 这篇笔记不会详细讲关于Promise的使用,可以去看我的另一篇博客你不知道的JavaScript——异步编程(中)Promise 编写的Promise遵循Promise/A+规范,可以通过promises-aplus-test的全部872个单元测试。 本篇笔记是一边编写代码一边记录的,所以代码 阅读全文
摘要:
前一篇的内容是事务的基本概念,为了保证事务的隔离性,数据库系统需要一定的并发控制机制。这一篇对并发控制机制进行研究,不考虑故障以及故障恢复,把目光放在并发控制上。 基于锁的协议 有并发的地方就有锁,锁的核心原理就是当一方想要访问一个数据项时,先请求获得该数据项的锁,同一时间内只有持有锁的一方可以访问 阅读全文
摘要:
事务 事务是数据库系统面向应用层服务的一个执行单元,一次事务可以包含一批SQL代码,用于执行一个操作。 比如A向B转账100这个操作可以封装成一个类似如下操作的事务,这里没有使用SQL代码,而是伪代码,后面我们还会看到很多次这样的伪代码 // 读取A的余额,减去100,写回数据库 read(A) A 阅读全文