2016/9/9 数据库刷题总结

哎 几年前,专业课不好好学,到头来一点一点慢慢补,心中悲伤辣么大。交了学费都玩进去了。

数据库定义语言:DDL,数据库定义语言用于创建、修改和删除数据库内的数据结构。
数据库查询语言:DQL,用于查询语言用于从数据库中的一个或多个表中查询指定的数据。
数据操作语言:DML,用于修改数据库中的数据,包括插入、更新和删除数据。
数据控制语言:DCL,用于控制对数据库的访问。

集中式DBS:是指数据库中的数据集中存储在一台计算机上,数据的处理集中在一台计算机上完成。

分布式DBS的定义:
是指数据存放在计算机网络的不同场地的计算机中,每一场地都有自治处理能力并完成局部应用;而每一场地也参与(至少一种)全局应用程序的执行,全局应用程序可以通过网络通信访问系统中的多个场地的数据。
如果数据库存放在服务器上,应用程序存放在客户机上,则为主从式(客户机/服务器模式)体系结构。

触发器定义:
触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和复杂的数据控制能力。
注意事项:
1.只有表才可以支持触发器,视图和临时表都不支持触发器。
2.每个表的每个事件只支持一个触发器,因此每个表最多支持6个触发器。
3.单一触发器不能与多个操作相关。
4.触发器不能更新和覆盖,如果想更新一个触发器必须先删除,再创建。

索引类型分类:①主索引:主索引是一种只能在数据库表中建立不能在自由表中建立的索引。在指定的字段或表达式中,主索 引的关键字绝对不允许有重复值。②候选索引:和主索引类似,它的值也 不允许在指定的字段或表达式中重复。一个表中可以有多个 候选索引。③唯一索引:唯一索引允许关键字取重复的值。当有重复值 出现时,索引文件只保存重复值的第1次出现。提供唯一索引主要是为了兼容早期的 版本。④普通索引:普通索引允许关键字段有相同值。在一对 多关系的多方,可以使用普通索引。

数据完整性可以分为四类:
1、实体完整性,实体完整性的目的是确保数据库中所有实体的唯一性,也就是不应出现完全相同的数据记录。
2、区域完整性,匹配完整性要求数据表中的数据位于某一个特定的允许范围内。
3、参考完整性,是用来维护相关数据表之间数据一致性的手段,通过实现参考完整性,可以避免因一个数据表的记录改变而造成另一个数据表内的数据变成无效值。
4、用户自定义完整性,用户自定义由用户根据实际应用中的需要自行定义。

数据库事务并发带来的问题有:更新丢失、脏读、不可重复读、幻象读。
1、更新丢失:一个事务的更新覆盖了另一个事务的更新。
2、脏读:一个事务读取了另一个事务未提交的数据。
3、不可重复读:一个事务两次读取同一个数据,两次读取的数据不一致。
4、幻象读:一个事务两次读取一个范围的记录,两次读取的记录数不一致。
一、脏读、不可重复读、幻读
1、脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。
例如:
张三的工资为5000,事务A中把他的工资改为8000,但事务A尚未提交。
与此同时,
事务B正在读取张三的工资,读取到张三的工资为8000。
随后,
事务A发生异常,而回滚了事务。张三的工资又回滚为5000。
最后,
事务B读取到的张三工资为8000的数据即为脏数据,事务B做了一次脏读。
2、不可重复读:是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
例如:
在事务A中,读取到张三的工资为5000,操作没有完成,事务还没提交。
与此同时,
事务B把张三的工资改为8000,并提交了事务。
随后,
在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读取的结果并不致,导致了不可重复读。
3、幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。
例如:
目前工资为5000的员工有10人,事务A读取所有工资为5000的人数为10人。
此时,
事务B插入一条工资也为5000的记录。
这是,事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。
4、提醒
不可重复读的重点是修改:
同样的条件,你读取过的数据,再次读取出来发现值不一样了
幻读的重点在于新增或者删除:
同样的条件,第 1 次和第 2 次读出来的记录数不一样
死锁 ,进程死锁,是个计算机技术名词。它是操作系统或软件运行的一种状态:在多任务系统下,当一个或多个进程等待系统资源,而资源又被进程本身或其它进程占用时,就形成了 死锁 。
数据库中的死锁,两个或多个事务都已经封锁了一些数据对象,然后又都请求对已为其他事务封锁的数据对象加锁,从而出现死等待。
数据库中为了实现并发控制,采取了封锁技术,但是封锁技术又会带来活锁和死锁的问题,所以死锁不是数据库事务并发带来的问题,而是解决事务并发带来的问题。

1、第一范式(1NF)
在任何一个关系数据库中,第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。
所谓第一范式(1NF)是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式(1NF)中表的每一行只包含一个实例的信息。例如,对于图3-2 中的员工信息表,不能将员工信息都放在一列中显示,也不能将其中的两列或多列在一列中显示;员工信息表的每一行只表示一个员工的信息,一个员工的信息在表中只出现一次。简而言之,第一范式就是无重复的列。

2、第二范式(2NF)
第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。如图3-2 员工信息表中加上了员工编号(emp_id)列,因为每个员工的员工编号是唯一的,因此每个员工可以被唯一区分。这个唯一属性列被称为主关键字或主键、主码。
第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。

3、第三范式(3NF)
满足第三范式(3NF)必须先满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。例如,存在一个部门信息表,其中每个部门有部门编号(dept_id)、部门名称、部门简介等信息。那么在图3-2的员工信息表中列出部门编号后就不能再将部门名称、部门简介等与部门有关的信息再加入员工信息表中。如果不存在部门信息表,则根据第三范式(3NF)也应该构建它,否则就会有大量的数据冗余。简而言之,第三范式就是属性不依赖于其它非主属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值