随笔分类 - 数据库
摘要:前一篇的内容是事务的基本概念,为了保证事务的隔离性,数据库系统需要一定的并发控制机制。这一篇对并发控制机制进行研究,不考虑故障以及故障恢复,把目光放在并发控制上。 基于锁的协议 有并发的地方就有锁,锁的核心原理就是当一方想要访问一个数据项时,先请求获得该数据项的锁,同一时间内只有持有锁的一方可以访问
阅读全文
摘要:事务 事务是数据库系统面向应用层服务的一个执行单元,一次事务可以包含一批SQL代码,用于执行一个操作。 比如A向B转账100这个操作可以封装成一个类似如下操作的事务,这里没有使用SQL代码,而是伪代码,后面我们还会看到很多次这样的伪代码 // 读取A的余额,减去100,写回数据库 read(A) A
阅读全文
摘要:假设磁盘子系统传输一个块的数据的平均时间是秒,磁盘块平均访问时间是秒(磁盘搜索时间加上旋转延迟),一次传输b个块并执行S次磁盘搜索的时间是 选择运算时间开销 下面是一些常见的选择运算所需要的时间开销,这里我们假设一个文件中有
阅读全文
摘要:顺序索引 索引结构与一个特定的搜索码相关联,用于快速随机访问表中的一个字段。搜索码可以是表中的任何属性。 顺序索引按顺序存储搜索码的值,并将搜索码与每个包含搜索码的记录关联起来。 如果被索引的文件自也按照一定顺序排序存储的话,那么可以将索引类型细分: 聚集索引(clustering index):被
阅读全文
摘要:文件组织 一个数据库会被映射到多个不同的文件,存储在磁盘上,这些文件被分成特定长的存储单元,称为块,大部分数据库默认情况下的块大小是4~8KB,大部分情况下这个值可以修改。 一个块中可能包含很多条记录,并且保证没有一条记录横跨多个块,这也限制了不可以有一条比块更大的记录,大部分需求中,字段只包含一些
阅读全文
摘要:好的关系设计 上一篇笔记记录了由ER图直接生成关系模式的过程,生成的关系模式完全依赖ER图的质量,如果ER图质量够高,有可能直接生成还不错的关系模式。 在关系设计中,还有其它的一些设计关系模式的方法。 设计选择:更大的模式 假设我们将instructor和department两个模式组合,使用ins
阅读全文
摘要:实体-联系模型 基本概念 实体:实体是有别于其他对象的一个事物,比如人,教师,学生,课程,专业。 实体集:一系列实体组成的集合,在数据库中对应的就是一个表。 属性:一组属性构成一个实体,比如学生可能具有学号,姓名,年龄等属性。每个实体中的属性都有一个值。 所以一个数据库中包含若干个实体集,每个实体集
阅读全文
摘要:基本运算 选择运算 选择选出关系中满足给定谓词的元组,组成新的关系,用小写希腊字母sigma()来表示选择,谓词写作的下标,关系则作为参数在括号中出现。 选择instructor关系中物理系的那些元组。 \[ \sigma_{dept\_name="Physics
阅读全文
摘要:函数和过程 虽然函数的功能在应用层面也能够解决,而且可能比数据库语言更加强大,但是这会徒增网络流量成本并且在连接该数据库的每一个应用中,都要编写一套相同函数。在数据库中编写,只需要一次。 声明函数 下面的代码声明了一个函数,这个函数接收一个系名作为参数,返回该系的人数。 create functio
阅读全文
摘要:连接表达式 连接条件 自然连接只有当指定属性相等时才能将两个表进行连接,而on可以指定自定义的任意连接条件。 如下SQL找出了所有学生的所有选课。 select * from student join takes on student.ID = takes.ID; 和自然连接不一样的就是,自然连接会
阅读全文
摘要:SQL 《数据库系统概念》第三章 本章的sql脚本:https://github.com/wflyer/silberschatz-6th-university-dataset(MYSQL) 省略一部分关于DDL的内容 SQL查询的基本结构 一个SQL查询语句包含SELECT、FROM和WHERE三个
阅读全文
摘要:关系模型介绍 《数据库系统概念》第二章 关系数据库的结构 如上是教师表和课程表,教师表通过ID列标识一个教师信息,而课程表通过course_id列标识一个课程信息。 第三个表是先修课程信息,course_id和prereq_id唯一标识了一条两门课之间的联系,代表prereq_id所代表的课程是co
阅读全文
摘要:学了SpringMVC和MyBatis后在开发一个博客网站练手,然后在存储博文评论和like与unlike功能时选择了NoSQL数据库,虽然实现了功能,但是对于NoSQL还是一知半解,准备花一些时间研究下NoSQL。 原书:NoSQL精粹 为什么用NoSQL 当系统要处理的数据量越来越大时,向单一服
阅读全文
摘要:简介 索引就是一个用于快速查找的文件 MYSQL的索引是存储引擎相关的,所以不能说是一个特定的数据结构,但大多都是基于B树和B+树。 由于树索引的有序性,所以查询时不用便利整个表,而且对于范围查询和排序操作有天生的优势。 推荐一篇B树和B+树的文章:面试官问你B树和B+树,就把这篇文章丢给他 复合索
阅读全文
摘要:前言 不为啥,学校开课了,而且之前学的MYSQL太浅了,所以来啃书。 选择合适的数据类型 用作索引的id最好使用自增的数字类型,插入时写入的索引位置相近,能减轻页分裂、磁盘随机访问和碎片问题。SELECT语句也会变得更快,因为逻辑相邻的行索引位置也是相邻的,如果使用md5那种随机的散列,访问局部性原
阅读全文
