@@ -95,7 +95,7 @@ MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,
95
95
** 两者的对比:**
96
96
97
97
1 . ** 是否支持行级锁** : MyISAM 只有表级锁(table-level locking),而InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。
98
- 2 . ** 是否支持事务和崩溃后的安全恢复: MyISAM** 强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快 ,但是不提供事务支持。但是** InnoDB** 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
98
+ 2 . ** 是否支持事务和崩溃后的安全恢复: MyISAM** 强调的是性能,每次查询具有原子性,其执行速度比InnoDB类型更快 ,但是不提供事务支持。但是** InnoDB** 提供事务支持事务,外部键等高级数据库功能。 具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
99
99
3 . ** 是否支持外键:** MyISAM不支持,而InnoDB支持。
100
100
4 . ** 是否支持MVCC** :仅 InnoDB 支持。应对高并发事务, MVCC比单纯的加锁更高效;MVCC只在 ` READ COMMITTED ` 和 ` REPEATABLE READ ` 两个隔离级别下工作;MVCC可以使用 乐观(optimistic)锁 和 悲观(pessimistic)锁来实现;各数据库中MVCC实现并不统一。推荐阅读:[ MySQL-InnoDB-MVCC多版本并发控制] ( https://segmentfault.com/a/1190000012650596 )
101
101
5 . ......
@@ -104,7 +104,7 @@ MyISAM是MySQL的默认数据库引擎(5.5版之前)。虽然性能极佳,
104
104
105
105
> 不要轻易相信“MyISAM比InnoDB快”之类的经验之谈,这个结论往往不是绝对的。在很多我们已知场景中,InnoDB的速度都可以让MyISAM望尘莫及,尤其是用到了聚簇索引,或者需要访问的数据都可以放入内存的应用。
106
106
107
- 一般情况下我们选择 InnoDB 都是没有问题的,但是某事情况下你并不在乎可扩展能力和并发能力 ,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择。但是一般情况下,我们都是需要考虑到这些问题的。
107
+ 一般情况下我们选择 InnoDB 都是没有问题的,但是某些情况下你并不在乎可扩展能力和并发能力 ,也不需要事务支持,也不在乎崩溃后的安全恢复问题的话,选择MyISAM也是一个不错的选择。但是一般情况下,我们都是需要考虑到这些问题的。
108
108
109
109
### 字符集及校对规则
110
110
@@ -160,14 +160,14 @@ select sql_no_cache count(*) from usr;
160
160
161
161
![ 事物的特性] ( https://my-blog-to-use.oss-cn-beijing.aliyuncs.com/2019-6/事务特性.png )
162
162
163
- 1 . ** 原子性:** 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
164
- 2 . ** 一致性:** 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
165
- 3 . ** 隔离性:** 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
166
- 4 . ** 持久性:** 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
163
+ 1 . ** 原子性(Atomicity) :** 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
164
+ 2 . ** 一致性(Consistency) :** 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;
165
+ 3 . ** 隔离性(Isolation) :** 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
166
+ 4 . ** 持久性(Durability) :** 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
167
167
168
168
### 并发事务带来哪些问题?
169
169
170
- 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对统一数据进行操作 )。并发虽然是必须的,但可能会导致以下的问题。
170
+ 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作 )。并发虽然是必须的,但可能会导致以下的问题。
171
171
172
172
- ** 脏读(Dirty read):** 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。
173
173
- ** 丢失修改(Lost to modify):** 指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。 例如:事务1读取某表中的数据A=20,事务2也读取A=20,事务1修改A=A-1,事务2也修改A=A-1,最终结果A=19,事务1的修改被丢失。
0 commit comments