快速掌握数据库
- 格式:doc
- 大小:30.00 KB
- 文档页数:5
一.丢失更新 当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。 e.g.事务A和事务B同时修改某行的值, 1.事务A将数值改为1并提交 2.事务B将数值改为2并提交。 这时数据的值为2,事务A所做的更新将会丢失。
解决办法:对行加锁,只允许并发一个更新事务。 二.未确认的相关性(脏读) 当第二个事务选择其它事务正在更新的行时,会发生未确认的相关性问题。第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改。 e.g. 1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务) 2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地! 3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000 像这样,Mary记取的工资数8000是一个脏数据。
解决办法:如果在第一个事务提交前,任何其他事务不可读取其修改过的值,则可以避免该问题。
三.不一致的分析(非重复读) 当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。 在一个事务中前后两次读取的结果并不致,导致了不可重复读。 e.g. 1.在事务1中,Mary 读取了自己的工资为1000,操作并没有完成 2.在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务. 3.在事务1中,Mary 再次读取自己的工资时,工资变为了2000
解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。 四.幻像读 当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻像读问题。事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其它事务删除。同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中。 e.g. 目前工资为1000的员工有10人。 1.事务1,读取所有工资为1000的员工。 2.这时事务2向employee表插入了一条员工记录,工资也为1000 3.事务1再次读取所有工资为1000的员工 共读取到了11条记录, 解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据,则可避免该问题. (四种问题的解决办法都是要调整事务隔离级别,亦即加不同的锁) 比如:在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。
SQL命令的类型: 1. 数据定义语言(DDL) CREATE TABLE, DROP INDEX, CREATE VIEW 2. 数据操作语言(DML) INSERT, UPDATE, DELETE 3. 数据查询语言(DQL) SELECT 4. 数据控制语言(DCL) ALTER PASSWORD, GRANT, REVOKE 5. 数据管理命令 对数据库的操作进行审计和分析 START AUDIT, STOP AUDIT 6. 事务管理命令 COMMIT, ROLLBACK, SET TRANSACTION
触发器:数据库里编译过的SQL过程,基于数据库里发生的其他行为来执行操作。它是存储过程的一种,会在特定的DML行为作用于表格时被执行。
TRUNCATE 的用法:truncate table table_name; 1. TRUNCATE只删除表中数据,不删除表的结构 2. TRUNCATE是DDL,立即生效(DDL隐士提交),不放倒ROLLBACK SEGMENT中,不能回滚,操作不触发TRIGGER. 3. 略
## 常见的数据库系统的体系结构:分布式数据库系统,客户机/服务器系统,浏览器/服务器系统,开发的数据库连接技术(ODBC) ODBC是开发一套开放式数据库系统应用程序的公共接口。利用ODBC接口使得在多种数据库平台上开发的数据库应用系统之间可以直接进行数据存取(利用驱动程序管理器),提高了系统数据的共享性和互用性。 ODBC数据库应用程序主要功能有连接数据库,向数据库发送SQL语句,为SQL语句执行结果分配存储空间,读取结果处理等等。
## 数据模型分为概念模型,逻辑数据模型和物理数据模型。概念模型如E-R图,逻辑数据模型如层次模型,网状模型,关系模型,面相对象模型等。物理模型面相计算机系统,描述存储结构和存储方法。概念模型和由概念到逻辑模型均由数据库设计人员完成。逻辑到物理数据模型由DBMS自动完成。
## SQL三级模式:外模式(视图),模式(基本表),内模式(存储文件) ## 索引属于内模式的范畴,一般采用B+树(动态平衡),Hash索引(查找速度快)来实现。索引可以提高查询效率,但过多会降低更新效率。索引可以分为唯一性索引(UNIQUE)和聚簇索引(CLUSTER)。
## 通配符问题:当要查询的字符含有通配符时,需要用ESCAPE指定的换码符对通配符做转义。
## WHERE在分组和聚集计算之前选择输入行,不能包含聚集函数。HAVING在分组和聚集计算之后选择分组行,一般总是包含聚集函数。 只有GROUP BY子句中的列才能和聚集函数同时出现在SELECT子句中。 嵌套查询子查询块中不能使用ORDER BY子句。
## 表中插入数据:INSERT INTO,删除:DELETE FROM,更新UPDATE table SET。 ## 视图创立:CREATE VIEW AS. 视图查询会经过消解转换为对基本表的查询,视图更新会经过消解转换为对基本表的更新。因此视图更新有限制,因为有些更新(如视图定义中含有聚集函数或源自多个表)不能唯一有效的转换为相应基本表的更新。
## 数据库的安全性:用户标识和鉴定,存取控制,视图机制,审计(Audit),数据加密存储,统计数据库的安全性。 1. 用户标识和鉴定:输入用户名、口令等来认证。 2. 存取控制: 自主存取控制(DAC):C2级。GRANT, REVOKE。三类用户(权限逐渐增加):一般数据库用户,具有DBO(DB所有者)特权的用户,具有DBA特权的用户。可以通过创建角色管理权限。 强制存取控制(MAC):B1级。主体被授予的敏感度标记称为许可证级别,客体被授予的敏感度标记称为密级。当且仅当许可证级别大于密级是,客体可读;当且仅当许可证级别等于密级时,可以可写。禁止高许可证级别的主体更新低密级客体的数据。 DAC与MAC共同完成DBMS安全机制,实现MAC首先要实现DAC。 3. 视图机制:定义视图,在视图上定义存取权限。 4. 审计:跟踪记录用户对数据库的所有操作。 5. 统计数据库:允许用户查询聚集类型的信息(需要限制,否则不安全)。
## 数据库的完整性:实体完整性(主码),参照完整性(外码),用户定义完整性(元素的约束) 触发器触发事件:INSERT, DELETE, UPDATE。触发器可以更灵活的维护数据库的一致性,但是应尽可能使用完整性约束代替触发器。
## 规范化理论用来改造关系模式,解决插入异常,删除异常,更新异常和数据冗余问题。 理解概念:主码(主码也是候选码),候选码,主属性(任何候选码中的属性),非主属性。 1NF:所有属性都是不可再分的最小数据项,同一列不能有多个属性。 2NF:消除非主属性对码的部分函数依赖 3NF:消除非主属性对码的传递函数依赖 BCNF:消除主属性对码的传递函数依赖。要保证每个决定因素都包含码。保证没有任何属性完全函数依赖于非码。(函数依赖范围内的最高范式) 4NF:考虑多值依赖情况下的最高范式。消除非平凡的多值依赖。 函数依赖和多值依赖是两种最重要的数据依赖。 有全主属性构成的关系至少为3NF,全码构成的关系最少为BCNF,二元关系必属于BCNF。
## 了解下Armstrong公里系统,属性分类(L、R、LR、N),极小函数依赖及(最小覆盖)。 ## 数据库设计的六个阶段: 需求分析 概念结构设计 逻辑结构设计 物理结构设计 数据库实施 数据库运行和维护
## 了解嵌入式SQL。SQL语言面相集合,主语言面相记录。所以SQL引入了游标的概念,用来协调这两种不同的处理方式。C语言中嵌入式SQL前加前缀 EXEC SQL。
## ODBC开放式数据互连(微软发布的访问数据库的标准API)产生的原因:实现源码级和执行级上都与RDBMS无关。嵌入式SQL在源码级与RDBMS无关,在执行级上有关。使用ODBC编写的应用程序可移植性好。 ODBC开发应用系统有四部分组成:用户应用程序,驱动程序管理器,数据库驱动程序,数据源。
## 事务(Transaction)是数据恢复和并发控制的基本单位。事务具有原子性(其操作序列要么不错,要么全做) 事务并发引起数据的不一致性(本文档第一页),其原因是并发操作破坏了数据的隔离性。实现并发控制的重要技术是封锁(常见的为X锁和S锁)。 避免活锁:先到先服务 避免死锁: 1. 预防 一次封锁法,顺序封锁法(所有事物按同一规定的顺序加锁)死锁预防不合适数据库的特点。 2. 诊断 超时法(等待时间过长) 等待图法(周期性生成和检测等待图,若存在回路,则死锁) 3. 解除 选择处理死锁代价最小的事物撤销。
## 两段锁协议(2PL) 对任何数据读写之前,先要申请并获得对数据的封锁,即扩展阶段。在开始释放一个封锁后,事物不在申请并获得任和锁,即收缩阶段。 两段锁协议是保证事物并发调度可串行性的充分不必要条件。可能会引起死锁。
## 封锁粒度 指封锁对象的大小。封锁对象可按逻辑单元(属性值,元组,索引,关系,数据库)和物理单元划分。 封锁粒度越小,并发度越高,系统开销越大。 多粒度封锁使得系统检测封锁冲突效率很低。因此有了意向锁。对一个结点加意向锁,说明它的下层结点(多粒度树)正在被加锁。常见的意向锁: