Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
醒狮指南
JavaGuide
提交
d85fa990
J
JavaGuide
项目概览
醒狮指南
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
5
Star
1
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,发现更多精彩内容 >>
未验证
提交
d85fa990
编写于
7月 26, 2019
作者:
ipofss
提交者:
GitHub
7月 26, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update MySQL.md
上级
d6ec462f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
7 addition
and
7 deletion
+7
-7
docs/database/MySQL.md
docs/database/MySQL.md
+7
-7
未找到文件。
docs/database/MySQL.md
浏览文件 @
d85fa990
...
...
@@ -95,7 +95,7 @@ MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,
**两者的对比:**
1.
**是否支持行级锁**
: MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。
2.
**是否支持事务和崩溃后的安全恢复: MyISAM**
强调的是性能,每次查询具有原子性,其执行
数
度比InnoDB类型更快,但是不提供事务支持。但是
**InnoDB**
提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
2.
**是否支持事务和崩溃后的安全恢复: MyISAM**
强调的是性能,每次查询具有原子性,其执行
速
度比InnoDB类型更快,但是不提供事务支持。但是
**InnoDB**
提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
3.
**是否支持外键:**
MyISAM不支持,而InnoDB支持。
4.
**是否支持MVCC**
:仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在
`READ COMMITTED`
和
`REPEATABLE READ`
两个隔离级别下工作;MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一。推荐阅读:
[
MySQL-InnoDB-MVCC多版本并发控制
](
https://segmentfault.com/a/1190000012650596
)
5.
......
...
...
@@ -104,7 +104,7 @@ MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,
> 不要轻易相信“MyISAM比InnoDB快”之类的经验之谈,这个结论往往不是绝对的。在很多我们已知场景中,InnoDB的速度都可以让MyISAM望尘莫及,尤其是用到了聚簇索引,或者需要访问的数据都可以放入内存的应用。
一般情况下我们选择 InnoDB 都是没有问题的,但是某
事
情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择。但是一般情况下,我们都是需要考虑到这些问题的。
一般情况下我们选择 InnoDB 都是没有问题的,但是某
些
情况下你并不在乎可扩展能力和并发能力,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择。但是一般情况下,我们都是需要考虑到这些问题的。
### 字符集及校对规则
...
...
@@ -160,14 +160,14 @@ select sql_no_cache count(*) from usr;
![
事物的特性
](
https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/事务特性.png
)
1.
**原子性:**
事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
2.
**一致性:**
执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
3.
**隔离性:**
并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
4.
**持久性:**
一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
1.
**原子性
(Atomicity)
:**
事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
2.
**一致性
(Consistency)
:**
执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
3.
**隔离性
(Isolation)
:**
并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
4.
**持久性
(Durability)
:**
一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
### 并发事务带来哪些问题?
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对
统
一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。
在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对
同
一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。
-
**脏读(Dirty read):**
当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。
-
**丢失修改(Lost to modify):**
指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。 例如:事务1读取某表中的数据A=20,事务2也读取A=20,事务1修改A=A-1,事务2也修改A=A-1,最终结果A=19,事务1的修改被丢失。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录