@@ -154,31 +154,31 @@ MySQL 默认采用自动提交模式。也就是说,如果不显式使用 `STA
154154
155155### 1. 原子性(Atomicity)
156156
157- 原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。
157+ 原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。
158158
159- 回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。
159+ 回滚可以用日志来实现,日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可。
160160
161161
162162
163163### 2. 一致性(Consistency)
164164
165- 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。以转账为例子,A向B转账,假设转账之前这两个用户的钱加起来总共是2000,那么A向B转账之后,不管这两个账户怎么转,A用户的钱和B用户的钱加起来的总额还是2000,这个就是事务的一致性。
165+ 事务必须使数据库从一个一致性状态变换到另外一个一致性状态。以转账为例子,A向B转账,假设转账之前这两个用户的钱加起来总共是2000,那么A向B转账之后,不管这两个账户怎么转,A用户的钱和B用户的钱加起来的总额还是2000,这个就是事务的一致性。
166166
167167
168168
169169### 3. 隔离性(Isolation)
170170
171- 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
171+ 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
172172
173- 即要达到这么一种效果:对于任意两个并发的事务 T1 和 T2,在事务 T1 看来,T2 要么在 T1 开始之前就已经结束,要么在 T1 结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
173+ 即要达到这么一种效果:对于任意两个并发的事务 T1 和 T2,在事务 T1 看来,T2 要么在 T1 开始之前就已经结束,要么在 T1 结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。
174174
175175
176176
177177### 4. 持久性(Durability)
178178
179- 一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。
179+ 一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。
180180
181- 可以通过数据库备份和恢复来实现,在系统发生奔溃时,使用备份的数据库进行数据恢复。
181+ 可以通过数据库备份和恢复来实现,在系统发生奔溃时,使用备份的数据库进行数据恢复。
182182
183183
184184
@@ -197,13 +197,13 @@ MySQL 默认采用自动提交模式。也就是说,如果不显式使用 `STA
197197
198198## 3. 数据库中的范式
199199
200- 满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
200+ 满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式 (3NF)就行了。
201201
202- 范式的包含关系。一个数据库设计如果符合第二范式,一定也符合第一范式。如果符合第三范式,一定也符合第二范式…
202+ 范式的包含关系。一个数据库设计如果符合第二范式,一定也符合第一范式。如果符合第三范式,一定也符合第二范式…
203203
204- - 1NF :符合1NF的关系中的每个属性都不可再分
204+ - 1NF:属性不可分
205205- 2NF:属性完全依赖于主键 [ 消除部分子函数依赖]
206- - 3NF:属性不依赖于其它非主属性[ 消除传递依赖]
206+ - 3NF:属性不依赖于其它非主属性 [ 消除传递依赖]
207207- BCNF(巴斯-科德范式):在1NF基础上,任何非主属性不能对主键子集依赖[ 在3NF基础上消除对主码子集的依赖]
208208- 4NF:要求把同一表内的多对多关系删除。
209209- 5NF(完美范式):从最终结构重新建立原始结构。
@@ -306,7 +306,7 @@ Sname, Sdept 和 Mname 都部分依赖于键码,当一个学生选修了多门
306306
307307### 1. 丢失修改
308308
309- T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。
309+ T1 和 T2 两个事务都对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。
310310
311311<div align =" center " ><img src =" assets/88ff46b3-028a-4dbb-a572-1f062b8b96d3.png " width =" 400 " /></div ><br />
312312
@@ -334,7 +334,7 @@ Sname, Sdept 和 Mname 都部分依赖于键码,当一个学生选修了多门
334334
335335** 图解:**
336336
337- T1 修改一个数据,T2 随后读取这个数据。如果 T1 撤销了这次修改,那么 T2 读取的数据是脏数据。
337+ T1 修改一个数据,T2 随后读取这个数据。如果 T1 撤销了这次修改,那么 T2 读取的数据是脏数据。
338338
339339<div align =" center " ><img src =" assets/dd782132-d830-4c55-9884-cfac0a541b8e.png " width =" 450 " /></div ><br />
340340
@@ -378,7 +378,7 @@ select salary from employee empId ="Mary";
378378
379379** 图解:**
380380
381- T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。
381+ T2 读取一个数据,T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。
382382
383383<div align =" center " ><img src =" assets/c8d18ca9-0b09-441a-9a0c-fb063630d708-1534474726485.png " width =" 400 " /></div ><br />
384384
@@ -427,7 +427,7 @@ select * from employee where salary =1000;
427427
428428** 图解:**
429429
430- T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。
430+ T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。
431431
432432<div align =" center " ><img src =" assets/72fe492e-f1cb-4cfc-92f8-412fb3ae6fec.png " width =" 400 " /></div ><br />
433433
0 commit comments