计算机基础知识—数据库

(1) 关系型和非关系型数据库的区别(各自优点)

关系型数据库

特点

  1. 基于单一关系模型,结构化存储,有完整性约束
  2. 通过二维表建立数据之间的联系
  3. 采用结构化查询语言(SQL)做数据读写
  4. 操作保存数据的一致性

优点

  1. ☆通过事务处理保持数据的一致性
  2. 数据更新的开销很小
  3. 可以进行Join等复杂查询
  4. 20多年的技术历程,技术成熟

缺点

  1. 数据读写必须经过sql解析,大量数据、高并发下读写性能不足
  2. 为保证数据一致性,需要加锁,影响并发操作
  3. 无法适应非结构化的存储
  4. 大量数据集中到一台服务区处理,使服务器不堪重负
  5. “阻抗失谐”,即数据库中存储的对象与实际的对象实体有一定的差别
  6. 扩展困难
  7. 数据库庞大,价格昂贵

NOSql数据库

特点

  1. 非结构化的存储。
  2. 基于多维关系模型。
  3. 部署容易,开源免费,成本低

优点

  1. 处理高并发、大批量数据的能力强
  2. 支持分布式集群,负载均衡,性能高
  3. 解决“阻抗失谐”问题
  4. 内存级数据库,查询速度快
  5. 存储格式多,支持key-value形式、文档形式、图片形式
  6. 没有多表连接查询机制的限制,扩展性高

缺点

  1. 技术起步晚,维护工具以及技术资料有限
  2. 不支持sql工业标准
  3. 没有join等复杂的连接操作
  4. 事务处理能力弱
  5. 没有完整性约束,对于复杂业务场景支持较差

(2) 常用SQL语句(DDL,DML,DCL,TCL)

1.DDL(Data Definition Language)数据库定义语言statements are used to define the database structure or schema.
DDL是SQL语言的四大功能之一。
用于定义数据库的三级结构,包括外模式、概念模式、内模式及其相互之间的映像,定义数据的完整性、安全控制等约束
DDL不需要commit.

CREATE
ALTER
DROP
TRUNCATE
COMMENT
RENAME

2.DML(Data Manipulation Language)数据操纵语言statements are used for managing data within schema objects.
由DBMS提供,用于让用户或程序员使用,实现对数据库中数据的操作。
DML分成交互型DML和嵌入型DML两类。
依据语言的级别,DML又可分成过程性DML和非过程性DML两种。
需要commit.

SELECT
INSERT
UPDATE
DELETE
MERGE
CALL
EXPLAIN PLAN
LOCK TABLE

3.DCL(Data Control Language)数据库控制语言 授权,角色控制等

GRANT 授权
REVOKE 取消授权

4.TCL(Transaction Control Language)事务控制语言

SAVEPOINT 设置保存点
ROLLBACK  回滚
SET TRANSACTION

SQL主要分成四部分:
(1)数据定义。(SQL DDL)用于定义SQL模式、基本表、视图和索引的创建和撤消操作。
(2)数据操纵。(SQL DML)数据操纵分成数据查询和数据更新两类。数据更新又分成插入、删除、和修改三种操作。
(3)数据控制。包括对基本表和视图的授权,完整性规则的描述,事务控制等内容。
(4)嵌入式SQL的使用规定。涉及到SQL语句嵌入在宿主语言程序中使用的规则。
http://blog.csdn.net/baidu_21578557/article/details/51884506

(3) 数据库中join的类型与区别(inner join, outer join, cross join, natural join, self join),注意适用场景和sql语句的编写

——inner join:内部联结,普通联结,用等于号联结
——outer join:外部联结,返回联结后的表包含没有关联的那些行(要指定哪个表的无关联行)
——cross join:笛卡尔乘机联结,交叉连接用于对两个源表进行纯关系代数的乘运算。它不使用连接条件来限制结果集合,而是将分别来自两个数据源中的行以所有可能的方式进行组合。
——natural join:自然联结,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉;而等值连接不会去掉重复的属性列。
——self join:自联结,某个表和其自身连接,连接方式可以是内连接,外连接,交叉连接

http://blog.csdn.net/hu330459076/article/details/6995308

(4) 数据库的索引类型

——数据库索引好比是一本书前面的目录,能加快数据库的查询速度。索引是对数据库表中一个或多个列(例如,employee 表的姓氏 (lname) 列)的值进行排序的结构。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。
——根据数据库的功能,可以在数据库设计器中创建索引:唯一索引、主键索引和聚集索引。 尽管唯一索引有助于定位信息,但为获得最佳性能结果,建议改用主键或唯一约束。

唯一索引: UNIQUE 例如:create unique index stusno on student(sno);
表明此索引的每一个索引值只对应唯一的数据记录,对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。

主键索引: primary key
数据库表经常有一列或列组合,其值唯一标识表中的每一行。该列称为表的主键。 在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

聚集索引(也叫聚簇索引):cluster
在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。 如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。

(5) 聚集索引和非聚集索引的区别(叶节点存储内容)

——聚集索引:行的物理顺序和键值的逻辑顺序相同,非聚集存储,则是不同。
——叶节点存储内容的区别:聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。索引的叶节点就是数据节点。而非聚簇索引的叶节点仍然是索引节点,只不过有一个指针指向对应的数据块。

(6) 唯一性索引和主码索引的区别

1.主键一定会创建一个唯一索引,但是有唯一索引的列不一定是主键;
2.主键不允许为空值,唯一索引列允许空值;
3.一个表只能有一个主键,但是可以有多个唯一索引;
4.主键可以被其他表引用为外键,唯一索引列不可以;
5.主键是一种约束,而唯一索引是一种索引,是表的冗余数据结构,两者有本质的差别

(7) 索引的优缺点,什么时候使用索引,什么时候不能使用索引(重点)

——优点:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引的方式与您使用书籍中的索引的方式很相似:它搜索索引以找到特定值,然后顺指针找到包含该值的行。

——缺点:并非所有的数据库都以相同的方式使用索引。作为通用规则,只有当经常查询索引列中的数据时,才需要在表上创建索引。索引占用磁盘空间,并且降低添 加、删除和更新行的速度。在多数情况下,索引用于数据检索的速度优势大大超过它的不足之处。但是,如果应用程序非常频繁地更新数据或磁盘空间有限,则可能 需要限制索引的数量。

——当频繁访问某一列数据的时候需要用索引,索引占用磁盘空间,并且降低添 加、删除和更新行的速度不适合用索引。

(8) 索引的底层实现(B+树,为何不采用红黑树,B树)

——
1.文件很大,不可能全部存储在内存中,故要存储到磁盘上
2.索引的结构组织要尽量减少查找过程中磁盘I/O的存取次数(为什么使用B-/+Tree,还跟磁盘存取原理有关。)
3.局部性原理与磁盘预读,预读的长度一般为页(page)的整倍数,(在许多操作系统中,页得大小通常为4k)
4.数据库系统巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入,(由于节点中有两个数组,所以地址连续)。而红黑树这种结构,h明显要深的多。由于逻辑上很近的节点(父子)物理上可能很远,无法利用局部性。

(9) 数据库引擎介绍,innodb和myisam的特点与区别

1.MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
2.MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。

(10) 数据库中事务的ACID(四大特性都要能够举例说明,理解透彻,比如原子性和一致性的关联,隔离性不好会出现的问题)

1.原子性(Atomicity)
事务的原子性是指事务是一个不可分割的工作单位,这组操作要么全部发生,否则全部不发生。

2.一致性(Consistency)
在事务开始以前,被操作的数据的完整性处于一致性的状态,事务结束后,被操作的数据的完整性也必须处于一致性状态。
拿银行转账来说,一致性要求事务的执行不应改变A、B 两个账户的金额总和。如果没有这种一致性要求,转账过程中就会发生钱无中生有,或者不翼而飞的现象。事务应该把数据库从一个一致性状态转换到另外一个一致性状态。

3.隔离性(Isolation)
事务隔离性要求系统必须保证事务不受其他并发执行的事务的影响,也即要达到这样一种效果:对于任何一对事务T1 和 T2,在事务 T1 看来,T2 要么在 T1 开始之前已经结束,要么在 T1 完成之后才开始执行。这样,每个事务都感觉不到系统中有其他事务在并发地执行。

4.持久性(Durability)
一个事务一旦成功提交,它对数据库的改变必须是永久的,即便是数据库发生故障也应该不回对其产生任何影响。

(11) Mysql的表空间方式,各自特点

共享表空间方式

由于是默认的方式,就暂且理解为Mysql官方推荐的方式。相对而言所有的数据都在一个(或几个)文件中,比较利于管理,而且在操作的时候只需要open这一个(或几个)文件即可,相对来说代价很低。
但问题是在数据达到以G为单位来计算的时候优劣逆转。一个大小惊人的文件很不利于管理,而且对于一个如此巨大的文件来说,读写它需要耗费的资源一样巨大。更加令人费解的是,MySQL竟然将索引和数据保存于同一个文件中,索引和数据之间尚存在资源争用,不利于性能的提升。你当然可以通过innodb_data_file_path 的配置规划多个表空间文件,但MySQL的逻辑是“用满后增加”,仅仅是一个文件的拆分而已,不能从根本上分离数据和索引。
之前曾经遭遇到700G以上的表空间文件,而且更加让人郁闷的是对于如此大的文件还在以每天数G的数量增加。由于无法停机,即便是拷贝一下也要花费差不多一夜,只能眼睁睁看着它继续增大而毫无保守可行的办法。

独立表空间方式

相对而言对立表空间每个表都有独立的多个数据文件,而且做到了索引和数据的分离。多个小文件之间很方便的完成跨数据库甚至跨硬件的数据拷贝和迁移。相对来说灵活性很好。
这样做同样带来另一个方面的问题。当数据库中的表数量达到一定级别时,每次操作所涉及的文件过多,如果按照默认Centos的ulimit -n = 1024的话,仅仅只能保证同时打开256个表以内,这在习惯上“拆库拆表”的MySQL数据结构上很难达到要求。尚且这种数据文件的利用率不算很高,当大量“不高”的文件集中起来,浪费的空间也很惊人,更何况最后可能出现的状况不是“一堆K级别的小文件”而是“一堆G级别的大文件”,有点适得其反的意思。你自然可以联想到分区表,又是一个“仅仅做文件拆分而已”,多个分区文件缺一不可。
之前同样遇到过这个问题,MySQL连接大的状况下大量的timeout,但主机负载还算可以,查了一圈才知道是open files限制的问题,限制一修改,负载变得惊人,但连接数却又提升的不多。
总之,两种方法各有所长,部分互补,但都不是解决问题的终极方案。期待MySQL能够出现真正意义上表空间的概念,更加自由的规划数据文件。

(12) 数据库的范式

——设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。
——第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)就行了。
——范式越高,数据的冗余度越小。其实没有冗余的数据库设计是可以做到的。但是,没有冗余的数据库未必是最好的数据库,有时为了提高运行效率,就必须降低范式标准,适当保留冗余数据。

(13) 视图的作用与使用方法(如何删除等)

——视图是虚拟的表,与包含数据库的表不一样,视图只包含使用时动态检索数据的查询。作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与上面用以正确联结表的相同的查询)
——建立视图,之后直接调用视图即可。
——用DROP删除视图,其语法为DROP VIEW viewname
——如果你对视图增加或删除行,实际上是对其基表增加或删除行。

PS:
学习:
1.1-14章有常见的SQL的相关语句,如何去写?
一般数据库的相关知识,会出现在银行的招商中,其余的一般都在选择题里面才有。截至到P108页。

2,联结的分类:
等值联结:两个表相同的部分联结输出
自联结:自己和自己联结,两个表相同
自然联结:返回联结后的表只有唯一的列,不存在相同的列
外部联结:返回联结后的表包含没有关联的那些行(要指定哪个表的无关联行)

3.MySQL中最重要的4条语句:select,insert,delete,update

4.视图:视图是虚拟的表,与包含数据库的表不一样,视图只包含使用时动态检索数据的查询。作为视图,它不包含表中应该有的任何列或数据,它包含的是一个SQL查询(与上面用以正确联结表的相同的查询)。

5.存储过程:为以后的使用而保存一条或者多条MySQL语句的集合,可以将其看做为批文件。

6.触发器:触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句):delete,insert,update,即每个表最多支持6个触发器

7.实务处理:事务处理(transaction processing)可以用来维护数据库的完整性,它
保证成批的MySQL操作要么完全执行,要么完全不执行。

8.访问控制:即你需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访
问控制,管理访问控制需要创建和管理用户账号。

猜你喜欢

转载自blog.csdn.net/u012414189/article/details/83831041