DBMS是数据库管理系统的简称。
目前最常见的DBMS :MSSQL SERVER、 ORACLE、 DB2、Sybase、MySQL等
DBMS的主要功能:数据定义,数据组织方式,数据操控,数据库运行管理,数据库建立和维护,其他..
数据库专门的关系运算时:选择、投影、连接、除运算。
数据模型篇:
数据模型由数据结构,数据操作,完整性约束组成;
应满足的三项要求:1.比较真实的模拟现实世界2.容易为人所理解3.便于在计算机上实现。
数据独立性分为逻辑独立性和物理独立性。
数据库的模式是数据库的逻辑结构。数据库主要的逻辑数据模型:层次模型,网状模型,关系模型,面向对象数据模型。
三个层次:概念模型、逻辑模型、物理模型。
概念模型中的数据对象一般是指一个复古的概念,对应现实世界的人和物。如选课系统中的学生、课程、老师。
概念模型中最重要的就是实体:属性,码,域
实体的关系有:一对一,一对多,多对多
结构模型:包括数据结构,数据操作,数据的约束条件。
数据模式,外模式关于用户,内模式关于物理结构和储存方式。
数据的完整性约束条件;:是给定的数据模型中数据及其联系所具有的制约和储存规则,用以限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。
关系模型篇:
通常把关系模型中的一个二维表称为一个关系(Relation) 。对于任何一个关系,包含以下基本概念(特性):
元组(Tuple):关系中的一行被称为一个元组。
属性(Attribute):关系中的一列即为一个属性,给每一个属性起一个名称即属性名。
码(Key):关系中某个属性或几个属性的组合的值可以唯一确定一个元组,则该属性组合被称为关系的码。
域(Domain):属性的取值范围。
分量:元组中的一个属性值。
一个关系模式的定义格式是 :关系名(属性名1,属性名2...)
若关系表中某一属性组的值没有重复,则可以通过该属性组对关系表中的元组进行区分,就说该属性组可以唯一地标识一个元组,把这样的属性组称为候选码。
若一个关系表中有多个候选码,选定其中一个标识各行,被选中的候选码被称为主码。
ps:主码不为空,必须唯一,可由多个属性组成。
设F是基本关系R的一个或一组属性,但不是主码。如果F与基本关系S的主码K相对应,则称F是基本关系R的外码。
被选做主码的属性组中的属性称为主属性,不包含在任何侯选码中的属性称为非码属性。
关系代数:
传统的集合运算:并,差,交,笛卡尔积;专门的关系运算:选择,投影,连接,除运算
列的同域性:同一列中的数据其数据类型相同并且来自同一个域;列的异名性:不同的列列名不能相同,列值可以同域也可以异域;列的无序性:列的次序可以任意交换;行的相异性:任意两行不能完全相同;行的无序性:行的次序可以任意交换;值的原子性:关系中的值基于现实语景不可再分。
关系模式:对关系的描述静态的、稳定的;关系实例:关系模式描述的关系在某一时刻的状态或内容,它是动态的、随时间不断变化的;关系模式和关系实例往往统称为关系。数据操作是集合操作,操作对象和操作结果都是关系。
关系的完整性:关系模型的完整性是指为了保证数据的完整、正确而对关系确定的某种约束条件。 三类完整性约束:实体完整性(主属性不能取空值,两个实体值相互区分)、参照完整性(关系表间数据行之间的参照一致性,相互参照的实体值不缺失)、用户定义的完整性(满足语义要求、实体各属性的约束)。
局部的E-R图集成为全局E-R图时,可能存在3类冲突。属性冲突:包括类型、取值范围、取值单位的冲突;结构冲突:例如同一对象在一个局部E-R图中作为实体,而在另一个局部E-R图中作为属性,同一实体在不同的E-R图中的属性个数和类型不同等;命名冲突:包括实体类型名、联系类型名之间异名同义,或同名异义等。
系统结构篇:
内部:从数据管理系统角度,三级模式结构
外部:从数据库最终用户角度,单用户结构、主从式结构、分布式结构、客户/服务器结构、浏览器/应用服务器/数据库服务器结构
![](https://img.haomeiwen.com/i10313266/23bc37dd1fc311ec.png)
语法篇:
1、创建数据库
create database 数据库名称
eg. create database my_db
2、创建数据库表
creat table 表名称{
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
}
例子:CREATE TABLE class(
cid VARCHAR(5) primary key,
cname VARCHAR(50) not null UNIQUE,
cyear VARCHAR(4) not null ,
tid VARCHAR(5) REFERENCES teacher(tid)
)
修改数据库表ALTER TABLE <表名>
删除数据库表DROP TABLE<表名>
3、建立索引
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]…)
<次序>:指定索引值的排列次序。 升序:ASC;降序:DESC;缺省值:ASC;
[UNIQUE]:此索引的每一个索引值只对应唯一的数据记录,不允许在索引列上出现重复值。
ps:对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束
[CLUSTER]:表示要建立的索引是聚簇索引。
ps:建立聚簇索引将对基表中数据进行物理排序
例子: SC表按学号升序和课程号降序建唯一索引:
CREATE UNIQUE INDEX SCnIDX ON SC(sid ASC,Cno DESC);
删除索引: DROP INDEX <索引名>;
4、查询语句
SELECT [DISTINCT] <目标列表达式> [,<目标列表达式>] …//关键词 DISTINCT 用于返回唯一不同的值。
FROM <表名或视图名>[, <表名或视图名> ] …
WHERE <条件表达式>
GROUP BY <目标列表达式> 或<列名>
HAVING <条件表达式>
ORDER BY <目标列表达式> 或<列名> [ ASC|DESC ] ]
FROM方式:连接语句写在FROM语句的后面
FROM 表名1 INNER JOIN 表名2 ON 表名1.列名1 = 表名2.列名2
INNER JOIN 表名3 ON 表名1.列名2 = 表名3.列名1
例子:FROM ustudent st INNER JOIN ugrade ug ON st.gid = ug.gid
INNER JOIN uteacher ut ON ug.tid=ut.tid
WHERE方式:连接的表写在FROM后面,连接条件语句写在WHERE语句中
FROM 表名1,表名2,表名3
WHERE 表名1.列名1 = 表名2.列名2 and
表名1.列名2 = 表名3.列名1
例子:FROM ustudent st ,uteacher ut ,ugrade ug
where st.gid = ug.gid AND ug.tid=ut.tid AND sname LIKE ‘李%'
5、插入语句
INSERT INTO <表名> [(<列1>[,<列2 >…)]
VALUES (<常量1> [,<常量2>]…) //列1与常亮1相对应
查询插入语句:INSERT INTO <表名> [(<属性列1> [,<属性列2>… )]
SELECT 查询语句; //SELECT子句中列必须与INTO子句匹配:个数、类型、宽度
功能:将查询结果插入已经存在的表中、插入数据的表必须已经存在
将 Student 表的 Insert 权限授予给用户 user1 的语句为:GRANR INSERT ON Table Student To user1 with grant option。
6、修改数据
UPDATE <表名>
SET <列名>=<表达式>[,<列名>=<表达式>]…
[WHERE <条件>]
功能:SET子句指定要修改的列及修改后取值,同时修改多个列时以逗号分隔,修改顺序会自左至右依次执行
WHERE子句:指定要修改的行.如果缺省,则修改表中的所有行。
7、删除数据
DELETE FROM <表名> [WHERE <条件>]
WHERE子句 //指定要删除的行、缺省删除表中的所有行
8、视图
建立视图:
CREATE VIEW <视图名> [(<列名> [,<列名>]…)]
AS <select查询语句>
[WITH CHECK OPTION] //检查where语句是否成立,不成立则拒绝该操作。
ps:如果视图名后边不指定列名,则可以用select语句查询语句中的列名。如果视图指定列名,则个数必须与select查询语句中的列数一样多。一般建议指定列名。
插入操作:
例子:insert into vst_02 values(‘1101002’,’李兰’,’女','1991-1-1','02')
修改操作://更新
update vst_02 set ssexy='M' where sid='1001001’ and gid='02'
删除操作:
delete from vst_02 where sid='1001001' and gid='02'
删除视图:
DROP VIEW <视图名>;
视图篇:
视图是在一个或几个基本表上定义的虚表,只存放视图的定义,即封装的查询语句,不包含具体的数据。只有在对视图查询时,才按视图的定义通过其中封装的查询语句从基本表中将数据查出。因为视图是虚拟的,物理上是不存在的,只是存储了数据的集合。
视图有以下作用:
①简化了操作,把经常使用的数据定义为视图。
②安全性,用户只能查询和修改能看到的数据。
③逻辑上的独立性,屏蔽了真实表的结构带来的影响。
缺点:性能差,修改限制
数据依赖和规范化
数据依赖:是指关系中各列值之间的确定关系
ps:如果关系中存在不合适的依赖关系,会存在大量冗余数据;发生插入异常、删除异常、更新异常;数据冗余应尽可能少;降低数据的分离原则与共享性。
规范化:被用来改造关系模式,指导设计人员通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
第一范式:
1nf:如果一个关系模式R的所有属性都是不可割的基本数据项,则R∈1NF。可以是部分函数依赖
第二范式:
2nf:若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于R的码,则R∈2NF。
ps: 非主属性的所有元素必须直接和主属性相关,满足1NF,每个非主属性对码都是完全函数依赖,排除了部分函数依赖。
将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。不能完全消除关系模式中的各种异常情况和数据冗余。
第三范式:
3nf : 若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。如果R∈3NF,则R也是2NF。
ps:满足1NF,每个非主属性都不传递依赖于码,排除了传递函数依赖。
数据库设计篇
基本步骤:1、数据库需求分析阶段 工具是数据流程图 2、概念结构模型阶段 画出E-R图,范式的规范 3逻辑结构模型阶段 把E-R图转化为数据模型,设计关系模式 4、物理结构阶段 库文件的组织形式 索引文件组织形式等 存储介质的分配存取路径的选择等。5、数据库实施阶段 建立实际的数据结构,装入数据进行测试和试运行 6、数据库运营与维护阶段 数据库的安全性和完整性
子模式DDL是用来描述:数据库的局部逻辑结构;
从ER图导出关系模型时,如果实体间的联系是M:N的,增加一个关系表示联系,其中纳入
M方和N方的码。
数据库恢复技术
恢复技术是衡量系统优劣的重要指标。
数据库管理系统对故障的对策:DBMS提供恢复子系统,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态,保证事务ACID。
故障种类分为:事物故障,系统故障,介质故障。
事物:用户定义的一个数据库操作实例,这些操作要么全做,要么全不做,不可分割。
事物的特性:原子性,隔离性,一致性,持续性
事物和程序:1、在关系数据库中,一条事物可以是一条sql语句,一组sql语句或整个程序。2、一个应用程序通常包含多个事物。
写伪代码的一般语句模板:
BEGIN TRY
BEGIN TRANSACTION
insert 描述
update 事件描述
delete 事件描述
COMMIT 事物 //COMMIT 提交事物的所有操作
END TRY
BEGIN CATCH
ROLLBACK //ROLLBACK 事物滚回到开始状态
END CATCH
事物故障:某个事务在运行过程中由于种种原因未运行至正常终止点就夭折了。
出现事物故障的常见原因:输入数据有误、运算溢出、违反了某些完整性限制、某些应用程序出错、并行事务发生死锁。
事物故障的恢复:强行回滚该事物。
系统故障:整个系统的正常运行突然被破坏、所有正在运行的事务都非正常终止、内存中数据库缓冲区的信息全部丢失、外部存储设备上的数据未受影响。
系统故障的恢复:第一步:扫描日志文件,对故障发生前已提交的事物标记重做,对故障发生尚未完成的事物标记撤销。第二步:对撤销事物进行撤销,反向扫描日志文件,对每个撤销事物更新操作做逆操作。第三步:对重做事物进行重做。
介质故障:硬件故障使存储在外存中的数据部分丢失或全部丢失。此故障发生的概率比前两者小得多,但破坏力大得多。
故障:磁盘损坏,磁头碰撞,操作系统的某种潜在错误,瞬时强磁场干扰。
恢复方法:装入数据库发生介质故障前某个时刻的数据副本,重做自此时始的所有成功事务,将这些事务已提交的结果重新记入数据库。
并发控制篇:
系数据库中以事务为单位执行指令,多事物执行方式:
事务串行执行、交叉并发方式、同时并发方式。
事物并发可能带来的问题:可能会存取和存储不正确的数据,破坏事务的隔离性和数据库的一致性。
并发操作带来数据不一致性:丢失修改;不可重复读;读“脏”数据。
封锁:事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
封锁类型有:排它锁(X型)、共享锁(S型)
封锁协议:在运用X锁和S锁对数据对象加锁时,需要约定一些规则,何时申请X锁或S锁持锁时间、何时释放。//常用的封锁协议:三级封锁协议
活锁:避免活锁的简单方法是采用先来先服务的策略;
死锁:T1和T2两个事务永远不能结束,形成死锁。死锁的预防:1、一次封锁法2、顺序封锁法。死锁的诊断:1、超时法2、等待图法。死锁的解除:选择一个处理死锁代价最小的事务,将其撤消,释放此事务持有的所有的锁,使其它事务得以继续运行下去。当然,对撤消的事务所执行的数据修改操作必须加以恢复。
错题锦集:
1、关于通配符
%替代一个或多个字符
_仅替代一个字符
[charlist]字符列中的任何单一字符
[^charlist]或者[!charlist]不在字符列中的任何单一字符
2、实体与实体之间的关系
一个1:1联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
一个1:n联系可以转换为一个独立的关系模式,也可以与任意n端对应的关系模式合并。
一个m:n联系转换为一个独立的关系模式,与该联系相连的各实体的码以及联系本身的属性均转换为关系的属性,而关系的码为各实体码的组合。
3、函数
COUNT() 函数返回匹配指定条件的行数。
SUM() 函数返回数值列的总数(总额)。
ORDER BY 语句用于对结果集进行排序。//默认升序排列,降序用DESC。
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
MAX() 函数返回一列中的最大值。NULL 值不包括在计算中。
MIN() 函数返回一列中的最小值。
4、系统恢复,各事物的处理方式
1)在检测点前已经执行完成,不用做任何处理
2)在检测点后、故障发生前执行完成,需要对其进行重做处理
3)在故障发生时还未执行完成,需要对其进行回滚撤销处理
5、高级语言连接数据库时用到的连接字串中,至少需要包含哪几项内容?
(1)DBMS安装实例名(2)数据库名(3)连接用户账号(4)账号密码
6、描述第一范式、第二范式、第三范式的基本条件:
第一范式:每个属性不可再分;
第二范式:非主属性完全函数依赖于码;
第三范式:非主属性既不部分依赖于码也不传递依赖于码。
网友评论