1. 数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式、外模式html
数据库系统三级抽象是指:java
三种数据库模式:外模式、概念模式和内模式:mysql
(1)模式程序员
定义:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是全部用户的公共数据视图。redis
理解:算法
① 一个数据库只有一个模式;sql
② 是数据库数据在逻辑级上的视图;mongodb
③ 数据库模式以某一种数据模型为基础;数据库
④ 定义模式时不只要定义数据的逻辑结构 (如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等),并且要定义与数据有关的安全性、完整性要求,定义这些数据之间的联系。缓存
(2)外模式 (External Schema)
定义:也称子模式 (Subschema) 或用户模式,是数据库用户 (包括应用程序员和最终用户) 可以看见和使用的局部数据的逻辑结构和特征的描述,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。
理解:
① 一个数据库能够有多个外模式;
② 外模式就是用户视图;
③ 外模式是保证数据安全性的一个有力措施。
(3)内模式 (Internal Schema)
定义:也称存储模式 (Storage Schema),它是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式 (例如,记录的存储方式是顺序存储、按照 B 树结构存储仍是按 hash 方法存储; 索引按照什么方式组织; 数据是否压缩存储,是否加密; 数据的存储记录结构有何规定)。
理解:
① 一个数据库只有一个内模式;
② 一个表可能由多个文件组成,如:数据文件、索引文件。
它是数据库管理系统 (DBMS) 对数据库中数据进行有效组织和管理的方法
其目的有:
① 为了减小数据冗余,实现数据共享;
② 为了提升存取效率,改善性能。
具体请看:http://www.2cto.com/database/201412/360263.html
2. SQL 语言包括数据定义、数据操纵 (Data Manipulation),数据控制 (Data Control)
3. SQL 经常使用命令:
CREATE TABLE Student(
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50) NOT NULL);// 建表
CREATE VIEW view_name AS
Select * FROM Table_name;// 建视图
Create UNIQUE INDEX index_name ON TableName(col_name);// 建索引
INSERT INTO tablename {column1,column2,…} values(exp1,exp2,…);// 插入
INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);// 插入视图实际影响表
UPDATE tablename SET name=’zang 3’ condition;// 更新数据
DELETE FROM Tablename WHERE condition;// 删除
GRANT (Select,delete,…) ON (对象) TO USER_NAME [WITH GRANT OPTION];// 受权
REVOKE (权限表) ON(对象) FROM USER_NAME [WITH REVOKE OPTION] // 撤权
列出工做人员及其领导的名字:
Select E.NAME, S.NAME FROM EMPLOYEE E S
WHERE E.SUPERName=S.Name
4. 视图
视图(View)是从一个或多个表(或视图)导出的表。视图与表(有时为与视图区别,也称表为基本表——Base Table)不一样,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,在对视图的数据进行操做时,系统根据视图的定义去操做与视图相关联的基本表。
数据库存储数据是经过表来实现的,其有物理存储空间,也是你数据真正存储的地方。能够经过对表的操做来实现你对数据的操做。
视图实际上是物理不存在的,其是经过数据库代码来将一些表中的数据进行一个想要的逻辑结构从新进行整理。可能这样说有点更迷糊。
视图没有新建表,只是把原来表中的数据成员经过数据库语言按照咱们须要的逻辑结构从新组织,而进行操做的时候跟一个表是同样的。
具体请看:http://www.w3school.com.cn/sql/sql_view.asp
5. 完整性约束:实体完整性、参照完整性、用户定义完整性
关系模型中能够有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。实体完整性规则定义了对关系中主属性(主键)取值的约束,即对主属性的值域的约束;而参照完整性规则定义了参照关系和被参照关系的外码与主码之间的参照约束,即对参照关系的外码属性值域的约束,规定外码属性的值域只能是空值或是相应被参照关系主码属性的值。用户定义完整性就是针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及的数据必须知足的语义要求,由应用的环境决定。例如,银行的用户账户规定必须大于等于 100000,小于 999999。因此,用户定义的完整性一般是定义对关系中除主键与外键属性以外的其余属性取值的约束,即对其余属性的值域的约束。
实体完整性约束规则是指:若属性(指一个或一组属性)A 是基本关系 R 的主属性,则 A 不能取空值。所谓空值就是 “不知道” 或“不存在”的值。
实体完整性规则说明以下:
用户自定义完整性约束:
不一样的关系数据库系统根据其应用环境的不一样,每每还须要一些特殊的约束条件。用户自定义的完整性就是针对某一具体关系数据库的约束条件。它反映某一具体应用所涉及的数据必须知足的语义要求。
6. 第三范式
7. ER(实体 / 联系) 模型
8. 索引做用
为何要建立索引呢?这是由于,建立索引能够大大提升系统的性能。
也许会有人要问:增长索引有如此多的优势,为何不对表中的每个列建立一个索引呢?这种想法当然有其合理性,然而也有其片面性。虽然,索引有许多优势, 可是,为表中的每个列都增长索引,是很是不明智的。这是由于,增长索引也有许多不利的一个方面。
具体请看:
9. 事务
事务是一系列的数据库操做,是数据库应用的基本逻辑单位。 事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操做序列,这些操做要么都执行,要么都不执行,它是一个不可分割的工做单位。
10. 锁:共享锁、互斥锁
两段锁协议:阶段1:加锁阶段 阶段2:解锁阶段
具体请看:http://www.cnblogs.com/ggjucheng/archive/2012/11/14/2770445.html
11. 死锁及处理:事务循环等待数据锁,则会死锁。
12. 存储过程:存储过程就是编译好了的一些 sql 语句。
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的 SQL 语句集,存储在数据库中,通过第一次编译后再次调用不须要再次编译,用户经过指定存储过程的名字并给出参数(若是该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。
存储过程与函数的区别:
存储过程的优势:
13. 触发器: 当知足触发器条件,则系统自动执行触发器的触发体。
触发时间:有 before,after。触发事件:有 insert,update,delete 三种。触发类型:有行触发、语句触发
14. 内联接,外联接区别?
内链接是保证两个表中全部的行都要知足链接条件,而外链接则否则。
在外链接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另外一个表的行。分左链接、右链接、全链接三种
15. 存储过程和函数的区别
存储过程是用户定义的一系列 sql 语句的集合,涉及特定表或其它对象的任务,用户能够调用存储过程,而函数一般是数据库已定义的方法,它接收参数并返回某种类型的值而且不涉及特定用户表。
16. 事务是什么?
事务是做为一个逻辑单元执行的一系列操做,一个逻辑工做单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
原子性事务必须是原子工做单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性事务在完成时,必须使全部的数据都保持一致状态。在相关数据库中,全部规则都必须应用于事务的修改,以保持全部数据的完整性。事务结束时,全部的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
隔离性由并发事务所做的修改必须与任何其它并发事务所做的修改隔离。事务查看数据时数据所处的状态,要么是另外一并发事务修改它以前的状态,要么是另外一事务修改它以后的状态,事务不会查看中间状态的数据。这称为可串行性,由于它可以从新装载起始数据,而且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性事务完成以后,它对于系统的影响是永久性的。该修改即便出现系统故障也将一直保持。
17. 游标的做用?如何知道游标已经到了最后?
游标用于定位结果集的行,经过判断全局变量 @@FETCH_STATUS 能够判断是否到了最后,一般此变量不等于 0 表示出错或到了最后。
18. 触发器分为事前触发和过后触发,这两种触发有和区别。语句级触发和行级触发有何区别。
事前触发器运行于触发事件发生以前,而过后触发器运行于触发事件发生以后。一般事前触发器能够获取事件以前和新的字段值。
语句级触发器能够在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。
1. MySql 的存储引擎的不一样
MySQL 中的数据用各类不一样的技术存储在文件 (或者内存) 中。这些技术中的每一种技术都使用不一样的存储机制、索引技巧、锁定水平而且最终提供普遍的不一样的功能和能力。经过选择不一样的技术,你可以得到额外的速度或者功能,从而改善你的应用的总体功能。
固然 MySql 支持的表类型不止上面几种。
具体请看:
2. 单个索引、联合索引、主键索引
索引是一种特殊的文件 (InnoDB 数据表上的索引是表空间的一个组成部分),它们包含着对数据表里全部记录的引用指针。普通索引(由关键字 KEY 或 INDEX 定义的索引) 的惟一任务是加快对数据的访问速度。
Mysql 常见索引有:主键索引、惟一索引、普通索引、全文索引、组合索引
table_name
ADD PRIMARY KEY ( column
)table_name
ADD UNIQUE (column
)table_name
ADD INDEX index_name ( column
)table_name
ADD FULLTEXT ( column
)table_name
ADD INDEX index_name ( column1
, column2
, column3
)Mysql 各类索引区别:
3. Mysql 怎么分表,以及分表后若是想按条件分页查询怎么办
当一张的数据达到几百万时,你查询一次所花的时间会变多,若是有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减少数据库的负担,缩短查询时间。
如何分表?
分表后若是想按条件分页查询怎么办?
具体请看:http://blog.51yip.com/mysql/949.html
4. 分表以后想让一个 id 多个表是自增的,效率实现
多个表之间的主键不能用数据库自己的自增主键来支持,由于不一样表之间生成的主键会重复。因此须要其余的方式获取主键 ID。
(1)经过 MySQL 表生成 ID
在《关于 MySQL 分表操做的研究》提到了一种方法:
对于插入也就是 insert 操做,首先就是获取惟一的 id 了,就须要一个表来专门建立 id,插入一条记录,并获取最后插入的 ID。
这种方法效果很好,可是在高并发状况下,MySQL 的 AUTO_INCREMENT 将致使整个数据库慢。若是存在自增字段,MySQL 会维护一个自增锁,innodb 会在内存里保存一个计数器来记录 auto_increment 值,当插入一个新行数据时,就会用一个表锁来锁住这个计数器,直到插入结束。
(2)经过 redis 生成 ID
(3)队列方式
使用队列服务,如 redis、memcacheq 等等,将必定量的 ID 预分配在一个队列里,每次插入操做,先从队列中获取一个 ID,若插入失败的话,将该 ID 再次添加到队列中,同时监控队列数量,当小于阀值时,自动向队列中添加元素。
这种方式能够有规划的对 ID 进行分配,还会带来经济效应,好比 QQ 号码,各类靓号,明码标价。如网站的 userid, 容许 uid 登录,推出各类靓号,明码标价,对于普通的 ID 打乱后再随机分配。
(5)oracle sequence : 基于第三方 oracle 的 SEQ.NEXTVAL 来获取一个 ID 优点:简单可用 缺点:须要依赖第三方 oracle 数据库
(6)mysql id 区间隔离 : 不一样分库设置不一样的起始值和步长,好比 2 台 mysql,就能够设置一台只生成奇数,另外一台生成偶数. 或者 1 台用 0~10 亿,另外一台用 10~20 亿. 优点:利用 mysql 自增 id 缺点:运维成本比较高,数据扩容时须要从新设置步长。
(7)基于数据库更新+内存分配: 在数据库中维护一个 ID,获取下一个 ID 时,会对数据库进行 ID=ID+100 WHERE ID=XX,拿到 100 个 ID 后,在内存中进行分配 优点:简单高效 缺点:没法保证自增顺序
具体请看:
5. MySql 的主从实时备份同步的配置,以及原理 (从库读主库的 binlog),读写分离。
具体请看:
6. 写 SQL 语句和 SQL 优化
具体请看:
7. 索引的数据结构,B + 树
具体请看:MySQL 索引背后的数据结构及算法原理
8. 数据库的锁:行锁,表锁;乐观锁,悲观锁
模式 | 行锁 | 表锁 | 页锁 |
---|---|---|---|
MyISAM | √ | ||
BDB | √ | √ | |
InnoDB | √ | √ |
表锁更适用于以查询为主,只有少许按索引条件更新数据的应用;行锁更适用于有大量按索引条件并发更新少许不一样数据,同时又有并发查询的应用。
具体请看:数据库锁:乐观锁和悲观锁,共享锁和排它锁,行级锁和表级锁
9. 数据库事务的几种粒度
数据库访问控制的粒度可分为 4 个层次, 分别是数据库级、表级、记录级 (行级) 和属性级(字段级)
具体请看:数据库事务的四大特性
10. 关系型和非关系型数据库区别
关系型数据库经过外键关联来创建表与表之间的关系,非关系型数据库一般指数据以对象的形式存储在数据库中,而对象之间的关系经过每一个对象自身的属性来决定。
当前主流的关系型数据库有 Oracle、DB二、Microsoft SQL Server、Microsoft Access、MySQL 等。
非关系型数据库有 NoSql、Cloudant。
nosql 和关系型数据库比较?
优势:
缺点:
好比 mysql 与 mongodb 的对比: