标签:数据结构导论 概率 触发事件 存储 values mongodb 存储空间 ace views
1. 数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式、外模式
数据库系统三级抽象是指:
三种数据库模式:外模式、概念模式和内模式:
(1)模式
定义:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。
理解:
① 一个数据库只有一个模式;
② 是数据库数据在逻辑级上的视图;
③ 数据库模式以某一种数据模型为基础;
④ 定义模式时不仅要定义数据的逻辑结构 (如数据记录由哪些数据项构成,数据项的名字、类型、取值范围等),而且要定义与数据有关的安全性、完整性要求,定义这些数据之间的联系。
(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、DB2、Microsoft SQL Server、Microsoft Access、MySQL 等。
非关系型数据库有 NoSql、Cloudant。
nosql 和关系型数据库比较?
优点:
缺点:
比如 mysql 与 mongodb 的对比:
标签:数据结构导论 概率 触发事件 存储 values mongodb 存储空间 ace views
原文地址:http://www.cnblogs.com/midiyu/p/7878556.html