Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jackxsu
JavaGuide
提交
3b44d9e0
J
JavaGuide
项目概览
jackxsu
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3b44d9e0
编写于
6月 17, 2021
作者:
T
TommyMerlin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix typo
上级
221635d6
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
4 addition
and
4 deletion
+4
-4
docs/database/MySQL.md
docs/database/MySQL.md
+4
-4
未找到文件。
docs/database/MySQL.md
浏览文件 @
3b44d9e0
...
...
@@ -4,7 +4,7 @@
顾名思义,关系型数据库就是一种建立在关系模型的基础上的数据库。关系模型表明了数据库中所存储的数据之间的联系(一对一、一对多、多对多)。
关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一
列
就存放着一条数据(比如一个用户的信息)。
关系型数据库中,我们的数据都被存放在了各种表中(比如用户表),表中的每一
行
就存放着一条数据(比如一个用户的信息)。
![](
https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/java-guide-blog/5e3c1a71724a38245aa43b02_99bf70d46cc247be878de9d3a88f0c44.png
)
...
...
@@ -34,7 +34,7 @@ mysql> show engines;
![
查看MySQL提供的所有存储引擎
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/mysql-engines.png
)
从上图我们可以查看出 MySQL 当前默认的存储引擎是 InnoDB
,
并且在 5.7 版本所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。
从上图我们可以查看出 MySQL 当前默认的存储引擎是 InnoDB
,
并且在 5.7 版本所有的存储引擎中只有 InnoDB 是事务性存储引擎,也就是说只有 InnoDB 支持事务。
**查看 MySQL 当前默认的存储引擎**
...
...
@@ -227,7 +227,7 @@ MySQL InnoDB 引擎通过 **锁机制**、**MVCC** 等手段来保证事务的
-
**脏读(Dirty read):**
当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。
-
**丢失修改(Lost to modify):**
指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。 例如:事务 1 读取某表中的数据 A=20,事务 2 也读取 A=20,事务 1 修改 A=A-1,事务 2 也修改 A=A-1,最终结果 A=19,事务 1 的修改被丢失。
-
**不可重复读(Unrepeatableread):**
指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。
-
**不可重复读(Unrepeatable
read):**
指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。
-
**幻读(Phantom read):**
幻读与不可重复读类似。它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。
**不可重复读和幻读区别:**
...
...
@@ -269,7 +269,7 @@ mysql> SELECT @@tx_isolation;
🐛 问题更正:
**MySQL InnoDB 的 REPEATABLE-READ(可重读)并不保证避免幻读,需要应用使用加锁读来保证。而这个加锁度使用到的机制就是 Next-Key Locks。**
因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是
**READ-COMMITTED(读取提交内容)**
,但是你要知道的是 InnoDB 存储引擎默认使用
**REPEA
a
TABLE-READ(可重读)**
并不会有任何性能损失。
因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是
**READ-COMMITTED(读取提交内容)**
,但是你要知道的是 InnoDB 存储引擎默认使用
**REPEATABLE-READ(可重读)**
并不会有任何性能损失。
InnoDB 存储引擎在
**分布式事务**
的情况下一般会用到
**SERIALIZABLE(可串行化)**
隔离级别。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录