Skip to content

Commit d32b48d

Browse files
committed
modify db
1 parent 8da36a4 commit d32b48d

11 files changed

+75
-19
lines changed

docs/database/重新学习MySQL数据库:Innodb中的事务隔离级别和锁的关系.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
# Table of Contents
2+
3+
* [Innodb中的事务隔离级别和锁的关系](#innodb中的事务隔离级别和锁的关系)
4+
* [事务中的加锁方式](#事务中的加锁方式)
5+
* [MySQL中锁的种类](#mysql中锁的种类)
6+
* [Read Committed(读取提交内容)](#read-committed(读取提交内容))
7+
* [Repeatable Read(可重读)](#repeatable-read(可重读))
8+
* [不可重复读和幻读的区别](#不可重复读和幻读的区别)
9+
* [悲观锁和乐观锁](#悲观锁和乐观锁)
10+
* [MVCC在MySQL的InnoDB中的实现](#mvcc在mysql的innodb中的实现)
11+
* [“读”与“读”的区别](#读与读的区别)
12+
* [](#-2)
13+
14+
115
本文转自互联网
216

317
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
@@ -265,9 +279,9 @@ RC(不可重读)模式下的展现
265279

266280
事务的隔离级别实际上都是定义了当前读的级别,MySQL为了减少锁处理(包括等待其它锁)的时间,提升并发能力,引入了快照读的概念,使得select不用加锁。而update、insert这些“当前读”,就需要另外的模块来解决了。
267281

268-
###写("当前读")事务的隔离级别中虽然只定义了读数据的要求,实际上这也可以说是写数据的要求。上文的“读”,实际是讲的快照读;而这里说的“写”就是当前读了。为了解决当前读中的幻读问题,MySQL事务使用了Next-Key锁。
282+
写("当前读")事务的隔离级别中虽然只定义了读数据的要求,实际上这也可以说是写数据的要求。上文的“读”,实际是讲的快照读;而这里说的“写”就是当前读了。为了解决当前读中的幻读问题,MySQL事务使用了Next-Key锁。
269283

270-
####Next-Key锁Next-Key锁是行锁和GAP(间隙锁)的合并,行锁上文已经介绍了,接下来说下GAP间隙锁。
284+
Next-Key锁Next-Key锁是行锁和GAP(间隙锁)的合并,行锁上文已经介绍了,接下来说下GAP间隙锁。
271285

272286
行锁可以防止不同事务版本的数据修改提交时造成数据冲突的情况。但如何避免别的事务插入数据就成了问题。我们可以看看RR级别和RC级别的对比
273287

docs/database/重新学习MySQL数据库:MySQL的事务隔离级别实战.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
# 目录
23
* [事务的基本要素(ACID)](#事务的基本要素(acid))
34
* [事务的并发问题](#事务的并发问题)

docs/database/重新学习MySQL数据库:MySQL里的那些日志们.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
# Table of Contents
2+
3+
* [目录](#目录)
4+
* [重新学习MySQL数据库10:MySQL里的那些日志们](#重新学习mysql数据库10:mysql里的那些日志们)
5+
* [1.MySQL日志文件系统的组成](#1mysql日志文件系统的组成)
6+
* [2.错误日志](#2错误日志)
7+
* [3.InnoDB中的日志](#3innodb中的日志)
8+
* [4- 慢查询日志](#4--慢查询日志)
9+
* [5.二进制日志](#5二进制日志)
10+
* [总结](#总结)
11+
12+
113
# 目录
214
* [重新学习MySQL数据库10:MySQL里的那些日志们](#重新学习mysql数据库10:mysql里的那些日志们)
315
* [1.MySQL日志文件系统的组成](#1mysql日志文件系统的组成)

docs/database/重新学习MySQL数据库:Mysql主从复制,读写分离,分表分库策略与实践.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
* [三、Mycat 垂直切分、水平切分实战](#三、mycat-垂直切分、水平切分实战)
1212
* [1、垂直切分](#1、垂直切分)
1313
* [2、水平切分](#2、水平切分)
14-
* [range start-end ,data node index](#range-start-end-data-node-index)
15-
* [K=1000,M=10000.](#k1000m10000)
1614
* [为什么需要读写分离](#为什么需要读写分离)
1715
* [MySQL主从复制](#mysql主从复制)
1816
* [Mycat读写分离设置](#mycat读写分离设置)
@@ -627,4 +625,4 @@ Mycat的配置有很多,不过因为我们只是使用Mycat的读写分类的
627625

628626
前面已经差不多都解释清楚了,因为我只是用的基本的主从复制,所以我的将`dataHost``balance`设置成了3
629627

630-
启动mycat,然后用数据库连接工具连接到mycat,可以测试是否配置成功,最简单的就是通过修改从库的数据,这样方便查看到底是运行到哪个库上面了,另外由于我是基于docker启动的mycat,所以如果是直接在系统中运行的mycat的,可以去看官方文档,看看到底怎么启动mycat
628+
启动mycat,然后用数据库连接工具连接到mycat,可以测试是否配置成功,最简单的就是通过修改从库的数据,这样方便查看到底是运行到哪个库上面了,另外由于我是基于docker启动的mycat,所以如果是直接在系统中运行的mycat的,可以去看官方文档,看看到底怎么启动mycat

docs/database/重新学习MySQL数据库:Mysql存储引擎与数据存储原理.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,34 @@
1+
# Table of Contents
2+
3+
* [**一、 MySQL记录存储(页为单位)**](#一、-mysql记录存储(页为单位))
4+
* [**页头**](#页头)
5+
* [**虚记录**](#虚记录)
6+
* [**记录堆**](#记录堆)
7+
* [**自由空间链表**](#自由空间链表)
8+
* [**未分配空间**](#未分配空间)
9+
* [**Slot区**](#slot区)
10+
* [**页内记录维护**](#页内记录维护)
11+
* [**二、 MySQL InnoDB存储引擎内存管理**](#二、-mysql-innodb存储引擎内存管理)
12+
* [**预分配内存空间**](#预分配内存空间)
13+
* [**数据以页为单位加载 (减少io访问次数)**](#数据以页为单位加载-(减少io访问次数))
14+
* [**数据内外存交换**](#数据内外存交换)
15+
* [**页面管理**](#页面管理)
16+
* [**页面淘汰**](#页面淘汰)
17+
* [**全表扫描对内存的影响?**](#全表扫描对内存的影响?)
18+
* [**页面淘汰**](#页面淘汰-1)
19+
* [**位置移动**](#位置移动)
20+
* [**三、MySQL事务实现原理**](#三、mysql事务实现原理)
21+
* [**1、事务特性**](#1、事务特性)
22+
* [**2、并发问题**](#2、并发问题)
23+
* [**3、隔离级别**](#3、隔离级别)
24+
* [**MySQL事务实现原理(事务管理机制)**](#mysql事务实现原理(事务管理机制))
25+
* [**1、MVCC 多版本并发控制**](#1、mvcc-多版本并发控制)
26+
* [**2、undo log**](#2、undo-log)
27+
* [**3、redo log**](#3、redo-log)
28+
* [**意义**](#意义)
29+
* [**四、MySQL锁实现原理**](#四、mysql锁实现原理)
30+
31+
132
## **一、 MySQL记录存储(页为单位)**
233

334
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/20230405205306.png)
@@ -255,4 +286,4 @@ RR级别下
255286

256287
死锁在库表中有记录,通过kill 那个锁删除。
257288

258-
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/%E5%86%B3%E5%AE%9A%E7%89%88.jpeg)
289+
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/%E5%86%B3%E5%AE%9A%E7%89%88.jpeg)

docs/database/重新学习MySQL数据库:Mysql索引实现原理和相关数据结构算法.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
12
# 目录
23

34
* [MySQL索引](#mysql索引)
@@ -904,4 +905,4 @@ title的选择性不足0.0001(精确值为0.00001579),所以实在没有
904905

905906
[5] Codd, E. F. (1970). "A relational model of data for large shared data banks". Communications of the ACM, , Vol. 13, No. 6, pp. 377-387
906907

907-
[6] MySQL5.1参考手册 - [http://dev.mysql.com/doc/refman/5.1/zh/index.html](http://dev.mysql.com/doc/refman/5.1/zh/index.html "http://dev.mysql.com/doc/refman/5.1/zh/index.html")
908+
[6] MySQL5.1参考手册 - [http://dev.mysql.com/doc/refman/5.1/zh/index.html](http://dev.mysql.com/doc/refman/5.1/zh/index.html "http://dev.mysql.com/doc/refman/5.1/zh/index.html")

docs/database/重新学习MySQL数据库:『浅入浅出』MySQL和InnoDB.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* [不可重复读](#不可重复读)
2323
* [幻读](#幻读)
2424
* [总结](#总结)
25-
* [[Innodb与Myisam引擎的区别与应用场景](https://www.cnblogs.com/changna1314/p/6878900.html)](#[innodb与myisam引擎的区别与应用场景]httpswwwcnblogscomchangna1314p6878900html)
25+
* [Innodb与Myisam引擎的区别与应用场景](#[innodb与myisam引擎的区别与应用场景])
2626

2727

2828
本文转自互联网

docs/database/重新学习MySQL数据库:从实践sql语句优化开始.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
* [InnoDB](#innodb)
99
* [0、自己写的海量数据sql优化实践](#0、自己写的海量数据sql优化实践)
1010
* [mysql百万级分页优化](#mysql百万级分页优化)
11-
* [  普通分页](#  普通分页)
12-
* [   优化分页](#  -优化分页)
13-
* [  总结](#  总结)
11+
* [普通分页](#普通分页)
12+
* [优化分页](#优化分页)
13+
* [总结](#总结)
1414

1515

1616
本文转自互联网
@@ -667,7 +667,7 @@ SELECT s.* from Student s INNER JOIN SC sc on sc.s_id = s.s_id where sc.c_id=0
667667

668668
## mysql百万级分页优化
669669

670-
###   普通分页
670+
### 普通分页
671671

672672
数据分页在网页中十分多见,分页一般都是limit start,offset,然后根据页码page计算start
673673

@@ -681,7 +681,7 @@ SELECT * from user limit **100001**,**20**; //time **0**.151s explain SELECT * f
681681

682682
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/d327669b28bc017d62dfe25833ba98245cf.jpg)
683683

684-
###    优化分页
684+
### 优化分页
685685

686686
使用主键索引来优化数据分页
687687

@@ -693,10 +693,10 @@ SELECT * from user limit **100001**,**20**; //time **0**.151s explain SELECT * f
693693

694694
![](https://java-tutorial.oss-cn-shanghai.aliyuncs.com/05fffbffc5e3ef9add4719846ad53f25099.jpg)
695695

696-
##   总结
696+
## 总结
697697

698698
在数据量比较大的时候,我们尽量去利用索引来优化语句。上面的优化方法如果id不是主键索引,查询效率比第一种还要低点。我们可以先使用explain来分析语句,查看语句的执行顺序和执行性能。
699699

700700

701701

702-
转载于:https://my.oschina.net/alicoder/blog/3097141
702+
转载于:https://my.oschina.net/alicoder/blog/3097141

docs/database/重新学习MySQL数据库:根据MySQL索引原理进行分析与优化.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
# 目录
2-
32
* [一:Mysql原理与慢查询](#一:mysql原理与慢查询)
43
* [一个慢查询引发的思考](#一个慢查询引发的思考)
54
* [二:索引建立](#二:索引建立)
@@ -523,4 +522,4 @@ title的选择性不足0.0001(精确值为0.00001579),所以实在没有
523522

524523
此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销,同时频繁的移动、分页操作造成了大量的碎片,得到了不够紧凑的索引结构,后续不得不通过OPTIMIZE TABLE来重建表并优化填充页面。
525524

526-
因此,只要可以,请尽量在InnoDB上采用自增字段做主键。
525+
因此,只要可以,请尽量在InnoDB上采用自增字段做主键。

docs/database/重新学习MySQL数据库:详解MyIsam与InnoDB引擎的锁实现.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,4 +326,4 @@ InnoDB在绝大部分情况会使用行级锁,因为事务和行锁往往是
326326

327327
2、在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁产生概率;
328328

329-
3、对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;
329+
3、对于非常容易产生死锁的业务部分,可以尝试使用升级锁定颗粒度,通过表级锁定来减少死锁产生的概率;

src/main/java/md/mdToc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public class mdToc {
66
public static void main(String[] args) {
7-
String path = "D:\\idea_project\\javaTutorial\\docs\\big-backEnd\\temp";
7+
String path = "D:\\idea_project\\javaTutorial\\docs\\database";
88
AtxMarkdownToc.newInstance().genTocDir(path);
99
}
1010
}

0 commit comments

Comments
 (0)