绪论
数据,数据库,数据库管理系统,数据库系统
ER图 实体,属性,关系
外模式(用户模式),模式(逻辑模式),内模式(存储模式)
- 关系模型
- 关系
- 元组:表中一行
- 属性:表中一列
- 码
- 域
- 分量
关系型数据库
运算符号
(4条消息) 数据库关系运算_公众号Java3y的博客-CSDN博客_数据库运算
SQL
语法
DDL DQL DML DCL
数据类型
模式定义&删除
CREAT SCHEMA <> AUTHORIZATION
数据库的安全性
- 概述:
- 不安全因素
- ⾮授权对数据库的恶意存取和破坏
- 数据库中重要的数据泄露
- 安全环境的脆弱性
- 因此我们需要对数据库进行安全性控制
- 不安全因素
静态⼝令鉴别
动态⼝令鉴别
⽣物特征鉴别
智能卡鉴别
授权
Great <权限> on 表名[(列名)] to 用户 [WITH GRANT OPTIONE]
revoke 回收,用法同上
WITH GRANT OPTIONE加上之后,该用户也可以将该权限给别人
角色
create role <角色名>
授权
grant <权限> on <对象类型> 对象名 to <角色1>,<角色2>...
给人添加角色
grant <角色>to 角色或者用户名字 [with admin option]
with admin option用法同上
回收
revoke <权限> on <数据对象> from 角色名字 [cascade]
cascade表示会将该用户给别人的权限一同收回,反with admin option
试图
- 为不同的用户定义不同的视图,把不需要的数据给隐藏起来,这样用户就不会进行误操作
审计
- 把对数据库的所有操作都记录到审计日志中,然后就可以通过日志审查这个里面是否有一些非法行为
数据加密
- 通过一些加密算法,把明文变成密文,这样别人就无法查看
数据库的完整性
- 正确性
- 符合现实世界的描述
- 相容性
- 同⼀对象在不同表⾥⾯是符合逻辑的
- 维护完整性
- 提供定义完整性约束条件的机制
- 提供完整性检查的⽅法
- 进⾏违约处理
三大完整性
实体完整性
- 主码唯⼀,且非空
参照完整性
- 外码的要么没有,要么只有⼀个(外码就是外键)
用户定义完整性
- 非空
- 列值唯⼀
- 满足某⼀个条件表达式 check来写
例如:
create table student(
no char(9) primary key,
sex char(2) check (sex in ('男','⼥')),
age int not null
);
断言
create assertion <断言名> <check⼦句> 其中check字句 与where⼦句的表达式类似
删除断言
drop assertion 断⾔名字;
触发器
-
触发器也叫做 事件->条件->动作 规则.
-
当对⼀个表增 删 改时候, 对触发器里面的条件进行检查,
-
如果成立,就执行触发器里面的动作.否则不执行里面的动作.
-
添加触发器
create trigger <触发器名> /*每当触发事件发生时,该触发器被激活*/
{before |after} <触发事件> on <表名> /*指明触发器激活时间是在执行触发事件前或后*/
referencing new|old row as<变量> /*referencing指出引用的变量*/
for each{row|statement} /*定义触发器的类型,指明动作体执行的频率*/
[where <触发条件>]<触发动作体> /*仅当触发条件为真时才执行触发动作体*/
- 删除触发器
drop trigger <触发器名> on <表名>
关系数据库理论
依赖
X→Y,但Y⊈X,则称X→Y是非平凡的函数依赖
X→Y,但Y⊆X,则称X→Y是平凡的函数依赖
候选码
-
概念:可以推出所有属性
-
如何选出候选码?
- 只出现在左边的一定是候选码
- 只出现在右边的一定不是候选码
- 左右都出现的不一定
- 左右都不出现的一定是候选码
- 再求确定的候选码的闭包,如果可以推出全部,那么当前确定的就是候选码
- 否则你要吧每一个可能的值放进当前确定的候选码里面进行求闭包
三大范式
-
1NF
- 所有字段值都是不可分解的原子值
-
2NF
- 不包含非主属性对码的部分函数依赖,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中
-
3NF
- 不包含非主属性对码的传递函数依赖,确保数据表中的每一列数据都和主键直接相关,而不能间接相关
-
BCNF
- 消除每一属性对候选键的传递依赖,BCNF是修正的第三范式
公理系统
最小依赖集
模式分解
- 准则: 无损连接 和 保持函数依赖
- 无损: 就是分解后再次连接,和分解之前⼀样
- 依赖: 依赖不变
数据库的设计
-
数据库设计的基本步骤
- 需求分析
- 概念结构设计 ER
- 逻辑结构设计 ER转逻辑模型
- 物理结构设计 逻辑转物理
- 数据库实施 写SQL
- 数据库运行维护 性能检测
数据库编程
-
嵌入式SQL
- 就是把SQL语句嵌⼊到 其他编程语⾔⾥⾯ ⽐如java
-
嵌入式SQL的处理过程:
- 预编译转换为函数调⽤
- 主语⾔编译
- 变成主语⾔所编译的类型
-
SQL与主语言的通信
- SQL给主语⾔传递状态
- 主语⾔给SQL提供参数
- SQL把查询结果交给主语⾔处理(游标,和主变量实现)
数据恢复技术
- 事务的四大特性:
- ACID
- A:原子性 autom
- 要么全做,要么全不做
- C:一致性 consistent
- 一致性与原子性密切相关,要么全做要么全不做,否则就会造成数据不一致。比如说︰银行汇钱,两边都要有操作才行
- I∶隔离性 isolate
- 一个事务的执行不能被其他事务所干扰
- D︰持久性duration
- 数据库的改变是永久的。比如要落入磁盘
故障
- 事物内部故障
- 采取REDO重做和UNDO撤销技术
- 系统故障DBMS
- 系统突然停转,系统要重启
- 介质故障
- 硬件损坏
- 计算机病毒
恢复
- 数据转储
- 对失败的事务重新执行
- 日志文件
- 记录事务对数据的更新操作的文件
策略
- 事务故障的恢复
- 事务异常终⽌,那么就撤销之前的所有操作
- 系统故障的恢复
- 还没执⾏完的事务UNDO、丢失的事务REDO。
- 介质故障的恢复
- 重装数据库,重做已经完成的事务
并发
排他锁 写锁 X锁
共享锁 读锁 S锁
可串行性
同时运行T1和T2,结果符合两个结果中任意一个就是可串行性