From e65dcbddfd6747fffb11bf79a7bd869edff2f940 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Sat, 17 Mar 2018 23:00:17 +0800 Subject: [PATCH] auto commit --- notes/数据库系统原理.md | 186 ++++++++++++++++++++-------------------- notes/算法.md | 11 +-- 2 files changed, 100 insertions(+), 97 deletions(-) diff --git a/notes/数据库系统原理.md b/notes/数据库系统原理.md index db0a3167..3cf23347 100644 --- a/notes/数据库系统原理.md +++ b/notes/数据库系统原理.md @@ -1,114 +1,116 @@ -* [事务四大特性](#事务四大特性) - * [1. 原子性](#1-原子性) - * [2. 一致性](#2-一致性) - * [3. 隔离性](#3-隔离性) - * [4. 持久性](#4-持久性) -* [数据不一致](#数据不一致) - * [1. 丢失修改](#1-丢失修改) - * [2. 读脏数据](#2-读脏数据) - * [3. 不可重复读](#3-不可重复读) -* [隔离级别](#隔离级别) - * [1. 未提交读(READ UNCOMMITTED)](#1-未提交读read-uncommitted) - * [2. 提交读(READ COMMITTED)](#2-提交读read-committed) - * [3. 可重复读(REPEATABLE READ)](#3-可重复读repeatable-read) - * [4. 可串行化(SERIALIXABLE)](#4-可串行化serialixable) -* [可串行化调度](#可串行化调度) -* [封锁类型](#封锁类型) -* [封锁粒度](#封锁粒度) -* [封锁协议](#封锁协议) - * [1. 三级封锁协议](#1-三级封锁协议) - * [2. 两段锁协议](#2-两段锁协议) -* [乐观锁和悲观锁](#乐观锁和悲观锁) - * [1. 悲观锁](#1-悲观锁) - * [2. 乐观锁](#2-乐观锁) - * [3. MySQL 隐式和显示锁定](#3-mysql-隐式和显示锁定) -* [范式](#范式) +* [一、事务四大特性](#一事务四大特性) + * [原子性](#原子性) + * [一致性](#一致性) + * [隔离性](#隔离性) + * [持久性](#持久性) +* [二、数据不一致](#二数据不一致) + * [丢失修改](#丢失修改) + * [读脏数据](#读脏数据) + * [不可重复读](#不可重复读) +* [三、隔离级别](#三隔离级别) + * [未提交读(READ UNCOMMITTED)](#未提交读read-uncommitted) + * [提交读(READ COMMITTED)](#提交读read-committed) + * [可重复读(REPEATABLE READ)](#可重复读repeatable-read) + * [可串行化(SERIALIXABLE)](#可串行化serialixable) +* [四、可串行化调度](#四可串行化调度) +* [五、封锁类型](#五封锁类型) +* [六、封锁粒度](#六封锁粒度) +* [七、封锁协议](#七封锁协议) + * [三级封锁协议](#三级封锁协议) + * [两段锁协议](#两段锁协议) +* [八、乐观锁和悲观锁](#八乐观锁和悲观锁) + * [悲观锁](#悲观锁) + * [乐观锁](#乐观锁) + * [MySQL 隐式和显示锁定](#mysql-隐式和显示锁定) +* [九、范式](#九范式) * [第一范式 (1NF)](#第一范式-1nf) * [第二范式 (2NF)](#第二范式-2nf) * [第三范式 (3NF)](#第三范式-3nf) * [BC 范式(BCNF)](#bc-范式bcnf) -* [约束](#约束) - * [1. 键码](#1-键码) - * [2. 单值约束](#2-单值约束) - * [3. 引用完整性约束](#3-引用完整性约束) - * [4. 域约束](#4-域约束) - * [5. 一般约束](#5-一般约束) -* [数据库的三层模式和两层映像](#数据库的三层模式和两层映像) - * [1. 外模式](#1-外模式) - * [2. 模式](#2-模式) - * [3. 内模式](#3-内模式) - * [4. 外模式/模式映像](#4-外模式模式映像) - * [5. 模式/内模式映像](#5-模式内模式映像) -* [ER 图](#er-图) - * [1. 实体的三种联系](#1-实体的三种联系) - * [2. 表示出现多次的关系](#2-表示出现多次的关系) - * [3. 联系的多向性](#3-联系的多向性) - * [4. 表示子类](#4-表示子类) -* [一些概念](#一些概念) -* [参考资料](#参考资料) +* [十、约束](#十约束) + * [键码](#键码) + * [单值约束](#单值约束) + * [引用完整性约束](#引用完整性约束) + * [域约束](#域约束) + * [一般约束](#一般约束) +* [十一、数据库的三层模式和两层映像](#十一数据库的三层模式和两层映像) + * [外模式](#外模式) + * [模式](#模式) + * [内模式](#内模式) + * [外模式/模式映像](#外模式模式映像) + * [模式/内模式映像](#模式内模式映像) +* [十二、ER 图](#十二er-图) + * [实体的三种联系](#实体的三种联系) + * [表示出现多次的关系](#表示出现多次的关系) + * [联系的多向性](#联系的多向性) + * [表示子类](#表示子类) +* [十三、一些概念](#十三一些概念) + * [数据模型](#数据模型) + * [数据库系统](#数据库系统) +* [十四、参考资料](#十四参考资料) -# 事务四大特性 +# 一、事务四大特性 -## 1. 原子性 +## 原子性 事务被视为不可分割的最小单元,要么全部提交成功,要么全部失败回滚。 -## 2. 一致性 +## 一致性 事务执行前后都保持一致性状态。在一致性状态下,所有事务对一个数据的读取结果都是相同的。 -## 3. 隔离性 +## 隔离性 一个事务所做的修改在最终提交以前,对其它事务是不可见的。也可以理解为多个事务单独执行,互不影响。 -## 4. 持久性 +## 持久性 一旦事务提交,则其所做的修改将会永远保存到数据库中。即使系统发生崩溃,事务执行的结果也不能丢失。持久性通过数据库备份和恢复来保证。 -# 数据不一致 +# 二、数据不一致 -## 1. 丢失修改 +## 丢失修改 T1 和 T2 两个事务同时对一个数据进行修改,T1 先修改,T2 随后修改,T2 的修改覆盖了 T1 的修改。 -## 2. 读脏数据 +## 读脏数据 T1 修改后写入数据库,T2 读取这个修改后的数据,但是如果 T1 撤销了这次修改,使得 T2 读取的数据是脏数据。 -## 3. 不可重复读 +## 不可重复读 T1 读入某个数据,T2 对该数据做了修改,如果 T1 再读这个数据,该数据已经改变,和最开始读入的是不一样的。 -# 隔离级别 +# 三、隔离级别 数据库管理系统需要防止出现数据不一致问题,并且有多种级别可以实现,这些级别称为隔离级别。 -## 1. 未提交读(READ UNCOMMITTED) +## 未提交读(READ UNCOMMITTED) 事务中的修改,即使没有提交,对其它事务也都是可见的。事务可以读取未提交的数据,这也被称为脏读。 -## 2. 提交读(READ COMMITTED) +## 提交读(READ COMMITTED) 一个事务只能读取已经提交的事务所做的修改。换句话说,一个事务所在的修改在提交之前对其它事务是不可见的。这个级别有时候也叫做不可重复读,因为两次执行同样的查询,可能会得到不一样的结果。 -## 3. 可重复读(REPEATABLE READ) +## 可重复读(REPEATABLE READ) 解决了脏读的问题,保证在同一个事务中多次读取同样的记录结果是一致的。 但是会出现幻读的问题,所谓幻读,指的是某个事务在读取某个范围内的记录时,另一个事务会在范围内插入数据,当之前的事务再次读取该范围的记录时,会产生幻行。 -## 4. 可串行化(SERIALIXABLE) +## 可串行化(SERIALIXABLE) 强制事务串行执行,避免幻读。 -# 可串行化调度 +# 四、可串行化调度 如果并行的事务的执行结果和某一个串行的方式执行的结果一样,那么可以认为结果是正确的。 -# 封锁类型 +# 五、封锁类型 排它锁 (X 锁)和共享锁 (S 锁),又称写锁和读锁。 @@ -116,7 +118,7 @@ T1 读入某个数据,T2 对该数据做了修改,如 - 一个事务对数据对象 A 加了 S 锁,可以对 A 进行读取操作,但是不能进行更新操作。加锁期间其它事务能对 A 加 S 锁,但是不能加 X 锁。 -# 封锁粒度 +# 六、封锁粒度 应该尽量只锁定需要修改的那部分数据,而不是所有的资源。锁定的数据量越少,发生锁争用的可能就越小,系统的并发程度就越高。 @@ -124,9 +126,9 @@ T1 读入某个数据,T2 对该数据做了修改,如 MySQL 中主要提供了两种封锁粒度:行级锁以及表级锁。 -# 封锁协议 +# 七、封锁协议 -## 1. 三级封锁协议 +## 三级封锁协议