【读过的书,留下的迹】数据库系统概念

前言

  最近发现有时候看完一本书,时间久了容易忘记,看书不总结思考效果大打折扣,故打算写这一系列文章,一是为了整理书中的要点,帮助自己消化理解;二是勉励自己多看书思考。文章中不会把书中内容讲解的非常详细,只是总结概括,适合已经阅读过该书的读者。

第3章:SQL

(1)基本类型

  • char(n):固定长度的字符串
  • varchar(n):可变长度的字符串
  • int:整数类型
  • smallint:小整数
  • numeric(p, d):定点数p位数字,d位小数
  • real, double precision:浮点数与双精度浮点数
  • float(n):精度至少为n位的浮点数
  • date:日历日期
  • time:一天中的时间
  • timestamp:date和time的组合

第4章:中级SQL

(1)连接表达式

  • 连接条件

    • 自然连接:natural join,两个表,属性名相同的列上取值相同,连接在一起
    • join…using (属性):两个表,指定属性上取值相同的,连接在一起
    • join…on : 跟where类似
  • 连接类型

    • 常规连接:内连接
    • 外连接(没有匹配的元组创建空值)
      • 左外连接(left outer join):只保留出现在左外连接运算之前(左边)的关系中的元组
      • 右外连接(right outer join):只保留出现在右外连接运算之后(右边)的关系中的元组
      • 全外连接(full outer join):全保留
  • 任意连接形式(内连接、左外连接、右外连接或全外连接)可以和任意的连接条件(自然连接、using条件连接或on条件连接)组合

(2)视图

  • 定义:不是逻辑模型的一部分,作为一种虚关系对用户可见的关系
  • 创建:create view v as

  • 一般,定义的视图都满足下列条件,称SQL视图是可更新的(即可插入、更新或删除)

    • from子句只有一个数据库
    • select子句只包含关系的属性名,不包含任何表达式、聚集或distinct声明
    • 任何没有出现在select子句中的属性可以为空
    • 不包含group by或having等

(3)完整性约束

  • not null:name varchar(20) not null
  • unique:unique (A1,A2…Am),属性组合形成超码
  • check:check (budget > 0)
  • 参照完整性:foreign key (A1) references table1

第5章:高级SQL

(1)函数

函数定义:

create function dept_count(dept_name varchar(20)) 
    returns integer
    begin
        declare d_count integer;
        select count(*) into d_count
        from table1
        return d_count;
    end

函数调用:

dept_count(‘test’)

(2)存储过程

定义:

create procedure dept_count_proc(in dept_name varchar(20), out d_count integer)
    begin
        select count(*) into d_count
        from table1
    end

调用:

declare d_count integer;
call dept_count_proc(‘test’, d_count);

(3)触发器

create trigger test after insert on table1
    referencing new row as nrow
    beginend;

create trigger test after delete on table1
    referencing old row as orow

create trigger test after update of table1 on A1
    referencing new row as nrow
    referencing old row as orow

(4)索引

create index <index-name> on <relation-name> ( <attribute-list> )
drop index <index-name>

第8章:关系数据库设计

(1)范式

  • 第一范式:确保每一列具有原子性。即数据库表中的所有字段值都是不可分解的原子值
  • 第二范式:主键列与非主键列遵循完全函数依赖关系。是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;也就是说在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中
  • 第三范式:非主键列之间没有传递函数依赖关系。是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。

第10章:数据存储和数据存取

(1)文件组织

  • 每个文件分成定长的存储单位,称为块,4~8KB

    • 假定1:没有记录比块大
    • 假定2:每条记录包含在单个块中
  • 堆文件组织:一条记录可以放在文件中的任何地方,只要那个地方有空间存放这条记录

  • 顺序文件组织:记录根据“搜索码”的值顺序存储。搜索码是任何一个属性或属性的集合
  • 散列文件组织:在每条记录的某些属性上计算一个散列函数,散列函数的结果确定了记录应放到文件的哪个块中

(2)索引

  • 两种基本的索引类型

    • 顺序索引:基于值的顺序排序
    • 散列索引:基于将值平均分布到若干散列桶中
  • 聚集索引(主索引):记录文件按照某个索引码指定的顺序排序

  • 非聚集索引(辅助索引):搜索码指定的顺序与文件中记录的物理顺序不同

  • 稠密索引:文件中的每个搜索码值都有一个索引项

    • 更快定位一条记录
  • 稀疏索引:搜索码的某些值建立索引。只有聚集索引时才能使用稀疏索引
    • 占空间小,插入和删除开销较小
  • 辅助索引:必须是稠密索引
  • 多级索引

  • B+树索引:一种多级索引

    • 增加文件插入删除开销,造成部分空间浪费(但都可以忍受)

第12章:事务管理

(1)事务概念

  • 原子性(Atomicity):事务中的所有元素作为一个整体提交或回滚,事务的个元素是不可分的,事务是一个完整操作。
  • 一致性(Consistemcy):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损。
  • 隔离性(Isolation):对数据进行修改的多个事务是彼此隔离的。这表明事务必须是独立的,不应该以任何方式以来于或影响其他事务。
  • 持久性(Durability):事务完成之后,它对于系统的影响是永久的,该修改即使出现系统故障也将一直保留,真实的修改了数据库

(2)事务隔离级别

  • 可串行化(serializable):通常保证可串行化调度
  • 可重复读(repeatable read):只允许读取已提交数据,而且在一个事务两次读取一个数据项期间,其他事务不得更新该数据
  • 已提交读(read committed):只允许读已提交数据,但不要求可重复读。比如在事务两次读取一个数据项期间,另一个事务更新了该数据并提交
  • 未提交读(read uncommitted):允许读取未提交数据,这是最低一致性级别

(3)并发控制

最常用的机制有两阶段封锁和快照隔离

  • 基于锁的协议
    • 共享型锁:只能读
    • 排他型锁:既可读又可写
    • 两阶段封锁协议:要求事务分两个阶段提出加锁和解锁,即事务释放了锁喉不能再发出加锁申请
  • 基于时间戳的协议
    • W-timestamp(Q):对Q进行写入的所有事务的最大时间戳
    • R-timestamp(Q):对Q进行读取的所有事务的最大时间戳
    • 时间戳排序协议:保证任何有冲突的read或write操作按时间戳顺序执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值