[Learning]数据库笔记

  "程序员面试宝典中数据库部分的笔记"

Posted by Stephen.Ri on March 2, 2018

数据库理论

底层索引B+树

一般涉及到从磁盘上查询的数据结构,用B+树,在内存中查询的数据结构,用红黑树

四大范式

  1. 1NF。如果关系模式R的所有属性的值域中的每一个值都是不可再分解的值。

  2. 2NF。R是1NF,且R中的每一个非主属性完全函数依赖于R的某个候选键。

  3. 3NF。R是2NF,且每个非主属性都不传递依赖于R的候选键。

  4. BCNF。R是1NF,且每个属性都不传递依赖于R的候选键。

  5. 4NF。R是关系模式,D是R上的多值依赖组合。如果D中成立非平凡多值依赖X–>Y时,X必是R的超键。

存储过程与函数

  1. 存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程。

  2. 函数通常是数据库已定义的方法,它接收参数并返回某种特定类型的值,并且不涉及特定用户表。

数据库事务

数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么全做要么全不做,是一个不可分割的工作单位。

  1. 原子性:一个事务要么全部执行,要么不执行。不可能执行一半就停止了。

  2. 一致性:事务的运行不会改变数据库中数据的一致性。

  3. 独立性:两个以上的事务不会出现交错执行的状态。

  4. 持久性:事务运行成功后,对系统的更新是永久的。

游标

游标用于定位结果集的行。

通过判断全局变量@@FETCH_STATUS可以判断游标是否到了最后,通常此变量不等于0表示出错或者到了最后。

触发器

  1. 事前触发器:运行于事件发生之前。

  2. 事后触发器:运行于触发事件发生之后。

  3. 语句级触发器:可以在语句执行前或后执行。

  4. 行级触发器:在所影响的每一行触发一次。

SQL注入式攻击

SQL注入式攻击就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串中,欺骗服务器执行恶意的SQL命令。在某些表单中,用户输入的内容直接用来构造(或者影响)动态SQL命令,或作为存储过程的输入参数,这类表单特别容易受到SQL注入式攻击。

过滤输入内容可以防范SQL注入式攻击闯入。

索引

聚焦索引

  1. 聚焦索引的顺序就是无力存储顺序。所以一个表最多只能有一个聚焦索引。

  2. 索引通过二叉树的结构描述,叶节点就是数据节点。

  3. 对于经常要搜索范围值的列特别有效。

非聚焦索引

  1. 索引顺序与数据无力排列顺序无关。

  2. 索引通过二叉树的结构描述,叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

有索引一定检索得快吗?

并不是,比如要检索表中的所有记录。