record
field
unique
数据模型
数据库层级关系:层次数据模型->每个子数组都有一个母数据(树结构)
hierarchical data model
网状数据模型:network data model->每个子数据都可以有多个母数据(多路树结构)
用指针(point)连接数据表示它们的关系。指针就是表示数据在硬盘上的存储位置的结构。
关系数据模型:relational data model
以二元表格(table)为基础 ->relation
行row -> record
列colum -> field
键(key)
主键(primary key )识别数据功能
投影(projection)抽取列的运算
运算:笛卡尔积(Cartesian product)、除(division)、差(difference)、交(intersection)、并(union)、补、连接(join)、选择(selection)、投影(project)
外键(foreign key):外键参照其他表中的主键时,通过连接,可以将两个表格粘合
除:从‘被除’中调取‘除表格’中包含的所有行,然后再总从中去掉‘除表格’中所有行的运算。
E-R模型掌握整体
E:entity(实体)
R:relationship(关系)
一对一(one to one)
多对多(many to many)
一对多(one to many)
实体之间对应的个数->基数(cardinality)
表格规范化(normallization)
非范式:没有除去数据重复的表格
first normal form:将表格分割成单纯的二元表格,既一栏中只有一个项目,每一列都是不可分割的基本数据项
second normal form:按照通过可识别数据的键来确定其他列值的原则分割表格。
函数依赖(functionally dependant)->通过某一列的值确定其他列的值。第二范式是
根据主键和其他列之间的函数依赖关系分割表格的。
third normal form:按照只能由主键确定其他列值的原则分配表格。
传递依赖(transitively depandant):通过某一列的值间接确定其他列的值。
第三范式是去除传递依赖而分割表格的。
外键参照其他表格的主键
设计数据库模式:
概念模式(conceptual schema):将现实世界的模型化的阶段进而,是确定数据库理论结构的阶段。概念模式设计是通过E-R模式把握现实世界,进而规范化表格来实现的。
内部模式(internal schema):从计算机内部看到的数据库,是确定数据库物理构造的阶段。内部模式通过设计数据库高速检索方法来实现。
外部模式(external schema):从用户和应用的角度来观察数据库。外部模式的设计是通过设计应用程序所必要的数据来实现的。
SELECT 中指定想要调取的列名,在FROM短语中指定想要调取的表格名称。
计算函数:(集合函数-aggregate function)
COUNT(*) 求行数
COUNT(列名) 求取非空值行数
COUNT(DISTINCT列名) 求取排除空值及重复行的行数
SUM(列名) 求取各行的合计值
AVG(列名) 求取各行的平均值
MAX(列名) 求取各行的最大值
MIN(列名) 求取各行的最小值
数据定义语言DDL(data definition language)生成表格
数据操作语言DML(data manipulation language)输入、调取数据
数据控制语言DCL(data control language)管理用户的访问等
SELECT * ->(列)
FROM 表单
WHERE 条件 LIKE '%瓜'
通配符(%,_)
%表示任意字符串
_表示一个字符
BETWEEN 150 AND 200
WHERE 单价 IS NULL
分组计算
GROUP BY
SELECT 地域,AVG(单价)
FROM 商品
GROUP BY 地域
HAVING AVG(单价)>=200
计算与分组化
使用子查询(subquery)检索
提取(fetch):使用游标抽取每行的数据
SQL具有数据定义功能,数据操作功能和数据约束功能
检索数据时使用SELECT命令
指定条件时使用WHERE命令
插入、更新、删除数据时使用INSERT UPDATE DELETE命令
制作表格时使用CREATE TABLE命令
事务(transaction)
锁(lock)
提交(commit)->确认处理过程
用户仅进行读取操作的时,使用共享锁,上共享锁间,其他用户能够读取数据,但不能写入。
用户想要进行写入操作时,就上独占锁。上独占锁时,其他用户既不能读取也不能写入。
同时执行控制(concurrence):使用锁控制多个事务。
回滚(rollback):取消事务。
事务必须由提交或者回滚中的任何一个来结束。
通过索引提高速度
数据库的故障恢复
日志
前卷法(roll forward):参照更新数据时更新后的值进行回复。
用户的一连贯操作,我们称之为数据库事务(Transaction)
数据库事务具有的性质ACID PROPERTIES
A(atomicity) 原子性 数据库事务必须结束于提交或回滚中的任意一个任务
C(consistency) 一致性 执行数据库事务时不能损坏数据库的一致性
I(isolation) 隔离性 两个事务的执行是互不干扰的,一个事务不可能看到其他事务的运行时,中间某一时刻的数据
D(durability) 持久性 在事务完成之后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚
数据库事务要具有原子性。数据库事务需由提交或回滚来结束。提交是指确定数据库事务处理的指令。回滚是指取消数据库事务处理的指令
关系型SQL -》COMMIT , ROLLBACK
loss update 更新遗失
资源:作为数据库操作对象的表格和行等单位
由于可序列化(serializable),就有必要进行同时执行控制(concurrency control),读取数据时使用共享锁(shared lock),写入操作时使用独占锁(exclusive lock)
可序列化:多个事务并行处理和逐个处理得到的结果一样。
使用共享锁时, 其他事务可以加设共享锁,但是不能加设独占锁。使用独占锁时,无论时共享锁还是独占锁,其他事务都不可以加设。
使用两相锁确保可序列化:各事务都是由加锁和解锁两相构成。
注意锁的粒度(granularity):加锁的范围。
其他同时执行控制:
时间戳控制(timestamp control)
乐观控制(optimistic control):暂时允许各事务读取的处理方法。从写入点开始,确认是否由其他的事务更新了数据。若其他事务更新了数据则回滚。
隔离级别(isolation level)设置
SET TRANSACTION
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
脏读(dirty read)
非重复读(non-repeatable read)
虚读(phantom)
未设置隔离级别的情况下,默认为SERIALIZABLE。
数据库安全:
GRANT SELECT , UPDATE ON 商品 TO 外国部; --赋予操作权限
赋予其他用户权限:
GRANT SELECT, UPDATE ON 商品 TO 外国部
WITH GRANT OPTION;
收回权限:REVOKE SELECT, UPDATE ON 商品 TO 外国部;
使用索引进行快速检索
索引方法由
B tree:在B树的每个节点可以有多个子数据,从而控制树的高度。除根节点,其他节点拥有的子数据最多为2n个, 最少为n个
散列(hash):对数据键值运用散列函数,求得存储地址的方法。但不适合用于条件检索和模糊检索。
最优化查询:
先执行选择减少行数
再执行投影减少与结果无关的列
最后执行连接
SELECT 日期, 商品名称
FROM 商品, 销售
WHERE 单价 >= 200
AND 商品.商品编码=销售.商品编码
选择方法:全条件检索方法和索引检索方法。
连接方法:
嵌套循环(neated loop)
一张表格的一行比较另一张表格所有行的方法
分类合并(sort merge)
重新排列各表格的行后,进行连接的方法。
散列(hash)
将一张表格根据散列函数进行分割后,与另一张表格中具有相同散列值的行进行连接的方法。
最优化标准
规则导向(rule based)
预先确定多个规则,按照规则决定的优先顺序选择方法的方式。
成本导向(cost based):
根据数据库内部的统计信息,选择方法的方式。
故障恢复:
事务故障:事务不完备为导致事务不能结束的情况。-》回滚
系统故障:因停电等原因造成系统停运的情况。-》回滚与前卷
介质故障:硬盘损伤的情况。可以基于备份文件进行故障恢复。对备份后提交的事务进行前卷处理。
检查点和恢复
为提高向数据库中写入的效率,多采用暂时将数据写入缓存的方法。写进缓存的内容与检查点中的数据是一致的。检查时对已提交的事务是不必进行故障恢复的。检查时未提交的事务才是故障恢复的对象。
分布式数据库:
在提交时必须使分散的多个数据库不发生矛盾。
存储程序和触发器
触发器(trigger):在数据更新时程序就会自动启动
三层c/s:表示层(客户端)通过web浏览器操作-》功能层(服务器)-》数据层(数据库服务器)
使用存储器
存储过程:没有处理步骤的返回值的程序
存储功能:返回从处理步骤来的返回值的程序
触发:在数据库中进行操作前后启动的程序
分布式数据库(distributed database)
透明度(transparency):用户可以不管数据的位置和移动使用分布式数据库。
水平分布
垂直分布
分配数据
水平分配方式
垂直分配方式
防止两阶段提交的矛盾
数据被提交时不能与任何一个服务器的数据产生矛盾。
两阶段提交(two-phase commit)
由协调者(coordinator)和参与者(participant)构成。
在两阶段提交的第一阶段,协调者查询各参与者是否能够提交。参与者能够提交时,回复OK -》安全确认(secure),第二阶段,协调者发出提交指令,由各参与者进行提交。
第一阶段一个参与者安全确认失败,将会对所有参与者发出回滚指令。
分布式数据库中的表格连接
嵌套循环
分类合并
半连接(semi join):仅将与连接相关的列发送至与之连接的服务器,并减少行之后进行连接的方法。
散列半连接:先求取A服务器中的散列值,并发送至B服务器。在服务器B中也求取散列值。通过散列值之间的检查连接。
复制的配置:
复制的方式:
读取专用:生成并下载从主服务器的主数据库中读取的专用方法。复制是在主服务器连接时生成的。复制仅可读取。
可更新主服务器:
从主服务器生成复制。该复制能够更新。更新复制时被反映在主服务器的主数据库中。
可更新各个服务器:各服务器之间拥有相同主服务器的方法。
XML:替代性数据表现手段
面向对象数据库
对每个对象都添加标识符进行显示,对象称作示例(instance)
封装(encapsulation)
图如果侵权,请联系我删除