数据库要点

2018-05-31  本文已影响16人  乘瓠散人
  1. 数据库:长期存在于计算机的,有组织的,可共享的,结构化的,相关的,大量的数据集合。
  2. 数据库管理系统:建立在操作系统之上的软件系统,负责管理和维护和数据库中的数据,同时给用户提供访问方法的接口
  3. 数据库设计三个阶段的目标和任务:
  1. 关系模型的三种管理约束
  1. 超码是在一个关系中唯一标识一行元组的属性集合;候选码是在一个关系中唯一标识一行元组的最小属性集合,不是唯一的;主码是候选码中的一个(根据主码来建立唯一索引);候选码中未被选中为主码的称为备选码。
  2. 范式
    范式:符合某一种级别的关系模式的集合
    规范化:一个低一级范式的关系模式通过模式分解可以转换成若干个高一级范式的关系模式
    函数依赖:对于X中的每一个取值,Y中有唯一值与之对应
    主属性:位于候选码中的属性
    1NF:关系模式中属性不可分
    2NF:不能存在非主属性对码的部分依赖
    3NF:关系模式中不能存在非主属性对码的传递依赖
  3. 事务
    事务就是被绑定在一起作为一个单元的一组SQL语句,完成用户的一系列操作。
    事务具有ACID特性:
  1. 调度:多个事务交叉执行的序列
    冲突操作:不同的事物对同一个数据的读写操作和写写操作
    可串行化调度:并发调度的结果与某个串行调度的结果相同,则该并行调度结果正确
    冲突可串行化调度:调度S可以通过交换非冲突(只有读读不冲突)操作变成某一串行调度
  2. 两段锁协议(2PL)是冲突可串行化的充分不必要条件
    2PL:锁分为增长段和收缩段,只有在不需要更多锁时才释放锁。


    image.png
  3. 严格两段锁:在事务提交时在释放锁
    严格两段锁:主要解决事务回滚问题,也可保证调度是可恢复的。
    可恢复调度:一个事务读取了另一个事务尚未提交的数据,这个事务一定要在那个事务提交之后提交。


    image.png
  4. 隔离等级
    read uncommitted:可读取别人尚未提交的数据
    read committed:只能读取别人已提交的数据
    repeatable read:多次读取的结果一定一样,事务执行时间为0
    serializable:串行化
    事实上,postgresql只提供两种事务的隔离级别,read committed 和 serializable。
  1. 索引
    减少访问磁盘的次数:定义一种叫索引的逻辑结构
    两种索引方式:(逻辑结构)
  1. ER模型的陷阱
  1. 内连接和外连接的区别
    内连接仅连接两个表中匹配的行,而外连接包含一个表中的所有行和另一个表中匹配的行。
  2. 什么是存储过程?
    存储过程是一个预编译的SQL语句,是为了完成某个数据库中的特定功能而编写的语句集,该语句集包括SQL语句,条件语句和循环语句。优点是允许模块化的设计,比如只创建一次,以后在该程序中就可以多次调用。如果某次操作需要多次执行SQL,使用存储过程比单纯SQL语句要快。
  3. 触发器的作用?
    触发器是一种特殊的存储过程,不由用户调用,而是通过事件触发而被执行。它可以维护数据的完整性和一致性,跟踪数据库内的操作从而不允许未经许可的更新和变化。可以级联,比如某表上的触发器包含对另一个表的数据操作,则该操作又会导致该表触发器被触发。
  4. 什么是视图?
    视图是一种虚拟的表,即视图所对应的数据不进行实际存储,数据库中只有视图的定义。具有和基本表相同的功能。可以对视图进行增删改查操作,视图通常是一个表或者多个表的行或列的子集。
    要通过视图更新基本表中的数据,则必须保证视图是可更新视图。对于可更新视图,视图中行和基表中的行之间必须具有一对一关系。有一些包含聚合等的结构就会使得视图不可更新。
  5. 如何优化数据库,提高数据库性能?
  1. union和union all的区别
    主要在于对重复结果的处理,union在进行表连接后会筛选掉重复的记录,而union all只是简单的将两个结果合并后返回,可能会包含重复的数据。

materialized aggregates:
物化聚合就是提前算,把运算结果存在一个表中。而视图还是执行SQL语句。缺乏了实时性,但很多时候并不在意。
DDL:数据定义语言,主要的命令有CREATE、ALTER、DROP等,大多在建立表时使用。
DML:数据操作语言,主要命令有SELECT,DELETE,UPDATE,INSERT,用来对数据库中的数据进行操作。
delete,truncate,drop比较:
truncate是清空一个表的内容
delete是dml操作,truncate是ddl操作,ddl操作回滚很麻烦,甚至无法进行。因此,用delete删除整个表的数据时,会产生大量的roolback,占用很多的rollback segments, 而truncate不会。
在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在。
而用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,不能被恢复。
truncate和delete只删除数据,而drop则删除整个表(结构和数据)

建立复合索引(c1,c2)顺序很重要 where c1会用到该索引,where c2则不会用到该索引
数据量很少时数据库是不会用索引的
分区,负载均衡:分区指向不同的硬盘,表空间,

上一篇下一篇

猜你喜欢

热点阅读