第一章小结:
数据库是一种按特定数据模型组织、存储和管理数据的文件
数据模型是描述数据、数据间关系及其约束的形式描述
关系模型是目前大多数数据库采用的数据模型
数据库系统:由用户、数据库应用程序、DBMS、数据库组成
DBMS是一类用于创建、操纵和管理数据库的系统软件
DBMS有多种类型、多种功能
数据库应用系统与其它软件系统一样,分多个阶段完成开发
个人数据库系统与企业级数据库系统分别面向不同场合
数据库应用结构:集中式结构、客户/服务器结构、分布式结构
Access软件既是一个桌面数据库管理系统,又是一个应用工具
第二章小结
问题:什么是关系数据库?
采用关系数据模型组织、存储和管理数据的数据库。
行:元组 列:属性 关系:表
可以把主键看作一个固定了的候选键(主键非空,外键非空)
代理键是自动生成的数字序列,代替复合主键
参照完整性就是指两个表的主键取值要对应外键。但列名不一定要一致。
对关系数据模型的描述:
三个方面:
数据结构:二维表
数据操作:基于关系代数的数据集合操作
数据约束:
实体完整性约束
参照完整性约束
用户自定义约束
函数依赖:属性依赖于主键 写作:主键->(属性)
在一个表中存在多组函数依赖,则说明关系不规范,拆分成只有一组函数依赖的关系表
第三章小结
列约束字句
check的用法
check(属性 in (’a’,’b’)),在这两个里面选一个有效
unique 值唯一
default缺省 default’a’,
表约束
主键:constraint x_pk primary key(a,b),(可用列约束可用表约束)
代理键:identity (m,n) m是初值,n是增量
外键:只能用表约束。constraint a_fk foreign key(a)
reference 另一个表表名(主键名)
On update cascade
在有参照完整性约束的情况下删除表会报错
创建索引:create index a on表+列 作用:快速查询
数据操纵sql语句:
插入:insert into table values(‘ ‘,'')
修改:update table
Set a(列名)=‘'
Where b(主键名)=''
删除:删除一行:delect from table
Where a=‘’,
查询语句:
select (可以打*号)
from table
where 条件 (where sth between a and b)(sth like %sth %指代任意字符,like是一种匹配)
书上只有where用了and,其他地方并列都用逗号
group by(having)
order by 列名 排序,默认升序,降序用desc,升序勇asc
内置函数:count(*) as 名称 from
Min(列名),max(列名) //注意在后面用as给查询结果的列命名
Len(列名),char字符的长度
Group by类似于order by 是对查询结果的操作,它可以将查询结果按照属性分组,并在组内进行操作
having 是表示限定条件 ,having 条件
unique和distinct的区别,前者是表约束,后者是列约束
group的理解:group一般和聚合函数一起用,group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面或者包含在having 后的聚合函数里。
where和having 的区别,where是在分组前的筛选,having是在分组后的筛选。内置函数一般不放在where中。having限制的是组不是列(它的处理范围是在组间)
多表关联查询:
子查询: where 主键 in
(
Select 外键
Balabala
)
连接查询:常用,注意在where中找到主键外键相等即可 善用as
from a join b on 外键等于主键:就是连接查询中把from和where合用
外连接查询:当查询结果不匹配的时候,想要输出不匹配的内容,就要用到外连接。因为以上的方法都是在匹配的前提下得到的。
Left/right/full join on(就是正常的join函数加一个前缀)
创建视图:create view as
本章细节:sql语言类型:
数据 定义/操作/查询/控制
第四章小结
e-r实体关系类型:
| 表示强制 。
表示可选 单线表示最小0最大1,多线表示最小0最大n,但是强制类型最小为1。
继承关系:完整继承(子类包含父类的所有情况),比继承多一个横线,非完整继承又有横线又有叉
存在一个箭头指向父类
互斥关系:子类互不兼容。 图中有一个叉
第五章:
数据库模型:概念数据模型;逻辑数据模型;物理数据模型;
标识符是逻辑概念,主键是物理概念
实体类型:强实体。 弱实体:依赖其他实体才能存在
如果弱实体属性中存在依赖实体的标识符的属性,就是id依赖。在图中需要画一个三角形,三角形的顶点指向强实体。
删除强实体之前要先删除所有依赖的弱实体
概念数据模型的设计:
自顶向下/自底向上/自内而外 /混合策略
逻辑模型到物理模型的转换:
非id依赖:主键还是弱实体的标识符不变, 但把强实体的标识符放入弱实体作为属性之一
ID依赖:强实体标识符放入后和弱实体的标识符一起构成复合主键
1:1关系的转换:主键外键不区分
1:n关系:将1代表的实体的标识符放入n代表的实体。但是不构成复合主键(主键不变)
M:n关系:需要中间关联表:包含之前两表的所有标识符并作复合主键
继承关系的转换:
父表中的主键放入子表,做主键和外键
函数依赖:
形式:决定因子->依赖函数
类型:
完全/部分/传递/多值%函数依赖
部分:复合主键中,属性只依赖于主键的一部分
多值:非主属性互相之间都依赖
传递:x->y,y->z
关系式不规范的原因:
存在多个函数依赖关系
关系规范化范式:六种
第一范式:属性不可再分
第二:消除部分依赖
第三:消除传递
巴斯德范式:所有函数依赖的决定因子都是候选键(决定因子要唯一)
第四范式:茶消除多值依赖
规范化程度过高:造成数据库性能下降。
反规范化:降低规范化程度:合并表
第六章重点
事务:概念:单个业务处理单元的一组数据库访问操作
(默认一句sql语句为一个事务)
性质:要么成功要么失败,不能部分
是dbms执行任务的最小单元/最小并发控制/最小故障恢复,可推上面
特性:asid
原子性:不可分->要么成功要么失败
一致性:多次结果一致
隔离性:不相互影响
数据的改变是永久的
事务sql语言:
开始:begin transaction
回滚:rollback
提交:commit
数据保存:save transaction
事务编程:
Begin
数据操作/查询语言
if error
Rollback
Commit
事务编程中不能对数据库进行操作,可以对数据进行操作
并发控制:防止数据不一致/死锁
数据故障分类:
不可重复读:两次读的过程中,另一个线程对数据的修改
脏读: 回滚过程中另一个线程对数据的读取
幻想读://类似不可重复读
丢失更新:两个数据修改进程交叉进行,其中一个做无用功
解决方法:并发事务调度:
要想解决问题->调度顺序:可串行化调度
具体方案:
事务锁:
二阶段锁定协议:事务分两阶段:
增长:只能获得锁,不能释放
缩减:释放锁,不能获得
二阶段锁定就能保证串行化
锁:
锁的分类:
排它锁:锁定后不允许读写(也不能允许别的进程对它加锁)
共享锁:锁定后不允许写,可以读
资源锁定粒度:
粒度:数据的粗放程度
从数据库到元组,粒度越来越小
加锁协议
一级加锁协议:修改共享数据之前加排它锁,事务结束后释放 问题:不可重复读 脏读
二级加锁协议:一级基础上,针对读操作,加共享锁,读完就释放 问题:不可重复读
三级加锁协议:与二级不同的是事务结束后才释放共享锁
死锁:两个进程都在等待对方进行。宕机
死锁的解决方法:回滚一个操作
数据库备份与恢复
恢复:从备份副本中恢复
备份方式:
备份文件恢复:
事务日志回滚:
第七章重点
数据库应用程序结构
表现层
业务逻辑层
数据访问层
数据库应用程序的开发
软件
数据库
数据库连接技术
Odbc 微软对数据库访问的一组api
Jdbc java API:建立与数据库的连接 发送sql语句 处理结果
Esql 嵌入式sql,把sql嵌入到宿主语言中
Web数据库系统
Jsp
游标编程
游标是从结果集中每次提取一条记录的方法
存储过程:
类似于脚本
Create procedure a
A char(10)
B varchar(20) output
As
Select b from ~~~
Where a=~~~
触发器
特殊的存储过程:触发之后自动执行
当数据操作语句对特定表的数据进行操作的时候得到触发,保证对数据的处理符合语句定义的规则
即实现参照完整性和数据一致性
触发器性能一般较低
触发器的组成:
事件
条件
动作
Create trigger A
On table1
For update
as
If update(STUDENTid)
Begin
Update table2
Set a.studentid=b.studentid
From table1 as a,table2 as b
Where a.x=b.x
浙公网安备 33010602011771号