数据库
1.数据库基础
1.什么是数据库?
数据库是相关数据的已组织集合。
2.什么是DBMS
是一种方便管理数据库的系统,可以快速高效实现数据库管理。
DBMS提供两个级别的数据独立性:
① 物理数据独立性:指数据的存储不依赖数据库中数据可能存在的逻辑关系。
① 逻辑数据独立性:指数据的逻辑关系不依赖数据库的存储结构。
3.数据模型
是数据库的底层结构。
Ø基于对象的模型
Ø基于记录的模型
Ø物理模型
在数据描述、数据关系、数据语义和一致性约束方面,不同数据模型的概念不同。
常用的基于记录的数据模型有一下三种:
Ø关系模型:有保存数据的表的集合组成。
Ø网状模型:数据用记录集合表示,并且数据间的关系用连接表示,可看做指针。
Ø层次模型:数据用记录集合表示,各记录集合被组织为数的集合。
4.数据库的事务管理
事务管理的ACID属性
ØAtomicity原子性——与事务相关的操作通常有一个公共的目的,并且相互依赖,为防止子操作对事务操作的妨害,确立原子性,可以消除子操作的可能性。
ØIsolation隔离性——事务必须是一个隔离的单元,不同的事务并发操作时互相不干预。
ØDurability持久性——当事务的操作成功后,对数据的影响是持久不变的,除非由其他的操作改变它。
ØConsistency一致性——事务是一个完整性的单元,为了确保整个数据集合的一致,从一种数据状态转换到另一种数据状态时,必须保证前后逻辑的一致。
2.数据库设计
1.数据库设计的步骤
Ø需求收集和分析,编制文档
Ø概念设计——确定系统中的实体及实体间的关系
Ø逻辑设计——确定概念模型与实现模型的对应关系
Ø物理设计——(可选的)由性能和硬件资源的可用性来决定。
2.概念模型的创建方法之一使用E-R图
强实体类型——不依赖与其他实体的存在
弱实体类型——依赖与其他实体的存在
属性——实体的特性
键——是唯一标识实体类型个别发生的数据项,例如:雇员编号或学生标识。
候选键——是唯一标识实体类型的个别发生的一个或一组属性。实体类型可能有一个或多个可能的候选键,选定的标识符称为主键。
构造E-R模型的步骤:
① 确定实体,列出所有潜在的实体类型。
② 除去重复的实体,切忌将系统作为实体类型。
③ 列出每个实体的属性,如果某一实体的属性是另一实体的属性,把它从实体列表中删除。
④ 标记主键
⑤ 定义关联
⑥ 检查每个实体类型以查看他如何与其它实体向关联
⑦ 描述关系的基数
⑧ 除去冗余关系
3.数据库规则化
N关系数据库模型,规则化是组织数据以最小化重复的过程。规则化通常包含将数据库分成两个或更多表和定义他们之间关系的过程。
规则化——指创建用来存储信息的有效地、可靠的、灵活的和适当的“关系”数据库结构的过程。组织数据到表中和定义它们之间关系的过程,称为规则化。
规则化的目的——是隔离数据、避免冗余,所以数据分布在不同的表中,且字段的添加、删除和修改可以在一张表中进行,并且通过已定义的关系传播到数据库的其余部分。
规则化的优点:
1、使数据结构非常灵活,并能够支持查看数据的不同方法。
2、可以确保数据完整性。
3、帮助消除冗余数据以节省空间并使得数据检索过程更有效率。
范式(共四级)是规则化过程中的一系列逻辑步骤。
Ø第一范式:需要消除变量重复字段/组(不同行、多个不同列有多个重复的列值);所有行包含相同数目的字段。
Ø第二范式:符合第一范式,并且每个非键列完全依赖与键列(非主键对于主键有紧密的依赖关系)。
Ø第三范式:符合第二范式,并且每个非键列必须相互独立,不能有任何传递的相关性。(传递相关性指:假如在表中有三列A、B、C,其中A是键列,当B依赖于A,C依赖于B,那么C依赖于A。这种相关性成为传递相关性)
Ø第四范式:符合第三范式,并且表不能包含两个或多个独立的多值列。
4.结构化查询语言(SQL)
SQL的组成部分:
Ø数据定义语言(DDL):提供了定义数据库对象(表、视图、索引、存储过程)的命令。
lCreateTabletableName();
lAlterTabletableNameAddcolumnnamevarchar;
lDropTable/View/IndexName
Ø数据操作语言(DML):提供插入、删除和修改表中记录的命令。
lInsertintotableName(column1,.......)values(value1,......);
lDeletefromtableNamewherecondition;
lUpdatetableNamesetcolumn1=value1,colunm2=value2,......Wherecondition;
Ø数据控制语言(DCL):提供管理和控制数据的命令。帮助用户控制安全性。
lGrant
lRevoke
Ø数据查询语言(DQL):提供从表中检索数据的命令。
lSelect*/colname1fromtableName{Wherecondition};
聚合函数
ØSum求和
ØAvg求平均数
ØMax 求最大值
ØMin 求最小值
ØCount行数统计
复合条件和逻辑运算符
ØNot查找非指定条件的值
ØAnd多个条件同时满足
ØOr至少有一个满足
在优先级上Not>And>Or
Ø组合and与or
一个例子:Selectemployeeidnofromemployeestatisticswhereposition='manager'andsalary>60000orbenefits>12000;
上述SQL语句的执行顺序如下:
1、position='manager'andsalary>60000=X
2、Xorbenefits>12000
Where子句先执行高优先级的运算符
另一个例子:Selectemployeeidnofromemployeestatisticswhereposition='manager'and(salary>60000orbenefits>12000);
上述SQL语句的执行顺序如下:
1、salary>60000orbenefits>12000=X
2、position='manager'andX
ØIn是否满足括号内指定的任何值
ØBetweenand查找给定范围内的值,包括边界值,用于where语句后
ØLike查找字符串内部的模式,匹配他们并基于要求的类型显示结果。
可以配合‘_’(表一个未知字符)或‘%’(表任意多个未知字符)
ØConcatenation(||)运算符:用于组合两个字符串或字段,常用于select后。
ØAs可以给列名起一个别名,可以省略不写。
ØOrederby用于某个字段已特定顺序格式化输出,asc升序(默认),desc降序。
ØNull在任何表达式中求值是其本身,只能用is运算符检查。
ØDistinct去除重复行,确定唯一性列表,用于select后。
高级SQL
Ø主键:是表中唯一非空的列,一张表只能有一个主键,但它可以是组合键(有多个列充当),组合键的每个列应有有效值。
Ø外键:表中的一列依赖于其它表的主键值,外键列和主键列之间定义的约束称为参考完整性约束。被参考的表称为主表(父表),包含外键的表称为从表(子表)。
ØJoin由于规则化,数据分布在不同的表中,实行规则化是为了避免冗余。当用户要查询多张表中的数据来获得完整的数据时,需要join几张不同的表的数据。
常用的join方式:
lCartesianjoin将第一张表的所有行与第二张表中的所有行进行映射,提供一张包含两张表所有记录的组合(一般不限定条件将显示为一个笛卡尔乘积)。
lNatural/Equijoin根据join条件中制定的基于值的等价条件,将第一张表和第二张表中的记录进行映射,值抽取两张表中完全映射的记录。
lRightjoin基于join条件中制定的基于值的等价条件,将第一张表中的记录与第二张表中的记录进行映射,显示第一张符合条件的记录与第二张表中的所有记录,对于第一张表中没有映射的列,显示为null。(与leftjoin相反)(Right全保留)
lLeftjoin基于join条件中制定的基于值的等价条件,将第二张表中的记录与第一张表中的记录进行映射,显示第二张符合条件的记录与第一张表中的所有记录,对于第二张表中没有映射的列,显示为null。(与Rightjoin相反)(left全保留)
lFulloutjoin是Rightjoin与Leftjoin的联合,只是首先取左边的表列值作为比较基础,然后在取右边的表列值作为比较基础。
lSelfjoin在两张或多张表的公共属性值之间建立联系。如果一张表有共享同一个值的两个属性,join可以在同一张表中执行。
ØGroupby在某些情况下,select语句的输出需要基于某个属性值,对现有数据进行逻辑分组。
ØHaving在逻辑分组完成后要引入条件时,必须用having子句(where子句是在select运行时运行的,而逻辑分组的条件在此之后执行的,所以无法用where执行条件)。
Ø子查询(嵌套查询)是在一个查询内的查询,先执行最内部的查询,然后将返回结果作为查询条件在执行外部查询。
ØExists当子查询有结果时,返回真值,执行外部查询,否则不执行。