数据库数据特点

Massive 数据量大
Presistent 持久
Safe 安全
Multi-user 多用户
convenient 方便
Efficient 高效
feliable 可靠

一个数据库网站

https://db-engines.com/en/

数据库的基础概念

数据和信息

信息:客观事物的存在方式和状态
数据:用来记录信息的可识别的符号 是信息的具体表现形式
数据与信息的连接:数据是信息的载体 信息是数据的内涵

数据库 数据管理系统 数据库系统 数据库管理员

数据库:
是长期存储在计算机内 有组织的 可共享 ,可存储,可读写的数据集合
数据库管理系统:
用户与操作系统之间的一层数据管理软件

数据库系统的体系结构

三层模式 两层印象

逻辑模式:数据库中全体数据的逻辑结构和特征的描述,逻辑模式与具体的物理实现细节无关,是一种体现用户需求的公共数据结构,(类似于中间件),一个数据库只有一个逻辑模式

外模式:具体使用者看到的数据结构(局部数据的逻辑结构和特征),一个应用有多个外模式

内模式:数据物理结构和存储方式的描述,数据在数据库内部的表示方式,一个数据库只有一个内模式

外模式印象:每一个外模式对应一个外模式印象,定义外模式与逻辑模式的对应关系

内模式印象:定义数据全局的逻辑结构与存储结构之间的对应关系

两级印象保证数据的逻辑独立性和物理独立性。

当内模式改变了,只要改变内模式印象就可以不改变逻辑模式
当逻辑模式改变了,改变两级印象,就可以不改变外模式和内模式

数据模型

数据模型要满足模拟真实世界,便于理解,便于实现。

数据结构
数据操作
数据的约束条件

关系模型
半结构化模型
 网状模型//早期模型
 层次模型
 XML //网络数据表示格式,传输和存储数据
 JSON
不同的模型具体区别就是数据结构不同

数据管理技术的产生和发展

人工管理阶段
文件管理阶段
数据库系统

关系数据库

关系数据模型

关系型: 表 、SQL
非关系型: noSQL

关系数据库系统: 是支持关系模型的数据库系统

关系模型:
 关系数据结构
 关系操作
 完整性约束

关系数结构:
 单一的数据结构:关系
  实体及实体间的联系均用各种关系来表示
 数据的逻辑结构:二维表
  关系模型中的数据结构就是一张二维表
关系模型建立在几何代数之上

域:一组具有相同数据类型的值的集合

笛卡尔积:

笛卡尔积每行代表一个元组,每列代表一个域。

关系:

关系也是一个二维表
 每行表示一个元组
 每列是一个域,表示一个属性

码(key,键)
候选码:在关系中唯一能标识元组的属性或属性集
主属性:候选码的各个属性
主码:用户选作元组表示的候选键
全码:关系的说有属性是这个关系的全码

基本关系的性质:
  列是同质的
 列的顺序无所谓
 行的顺序无所谓

什么是关系模式
  关系模式是对关系的描述
  学生(学号,姓名,年龄,性别,籍贯)
  R(A1,A2,A3,A4,A5)
  关系是关系模式在某时刻的取值

关系数据库:
在一个给定的应用领域中,实体及实体之间联系的关系的集合构成一个关系数据库

关系操作:
  查询 插入 删除 修改

关系操作特点:
 集合操作方式

关系数据语言的种类:
  关系代数的语言
  关系演算的语言

关系的完整性约束:
  实体完整性
  参照完整性
  用户定义的完整性
(前两者必须满足)

实体完整性:
  主码唯一且不为空
  主属性不能取空

参照完整性:
外码:
 一个关系中的某个属性是某个关系的主码,外码作为主码的关系是参照表
 外码必须取参照表的合适值或者空置

用户自定义的完整性:
  用户自己定义的规则

关系数据语言

关系代数

一种抽象的数据查询语言
用对关系的运算来表达查询

关系代数 关系演算 :早期 ,现在不用

关系代数:
  并 差 交
  投影 选择
  笛卡尔积、连接
  重命名

运算对象:关系
运算符:4类
运算结果:关系

投影:

选择:


笛卡尔积:

连接Join:


等值连接,大于连接,小于连接
自然连接:在等值连接上去除重复的列

重命名:

等价运算:

运算符优先级:

表达树:

SQL (Structured Query Language)

DDL

数据定义语言
定义表:
  创建表
  删除表
  修改表定义

定义基本表:
 关系名(表名)
 属性名(列名)
 属性数据类型
 完整性约束

SQL支持的数据类型:
整型:
bigint 8个字节
int 4个字节
smallint 2个字节
tinyint 1个字节
bit 只能取0或者1
精确数值数据:
decimal (p,q) p数据宽度,q小数点后面的位数
numeric
浮点数类型:
float 8个字节存储数据 ±3.04E+308
real 位数为24 4个字节 ±3.04E+38
字符串数据类型:
char : char(n)固定长度为n个字符的字符串
varchar:varchar(n),可变长度,最长长度为n个字符串
日期时间数据:
data :DATE ‘yyyy-mm-dd’
time:‘hh:mm:ss’
datatime:


主键唯一不能为空值,唯一键可以为空值。

FOREIGN外键 REFERENCE参照表

修改基本表:


删除基本表:

DML

数据操作语言
查询:

From之后都是SELECT的子句

单表查询

单表查询:选择仅涉及一个表
SELECT:选择表中的若干列
WHERE :选择表中的若干元组
ORDER BY:对查询结果排序
GROUP BY: 对查询结果分组
HAVING:对分组之后的结果进行筛选


通配符:
通配符配合like使用,like是模糊匹配符

select sname,sno,score From Student3 where score > 1.0;
select sname,sno,score From Student3 where sname like '%2';--通配符
select sname,sno,score From Student3 where sname like 'n_m_2';--通配符
select sname,sno,score From Student3 where score > 1.0 ORDER BY score DESC; --排序

对于某些情况下 只是希望通配符作为普通字符,可以使用转移字符,
a_b 就是普通的a_b
.
IS NULL 表示 = NULL,= NULL会报错
.
集函数:
统计时不计NULL值

select ssex ,count(*) as number ,max(score) as highScore from Student3 Group By ssex; -- 分组

HAVING对分组之后的结果再做筛选

.

连接查询

select Stu.* ,SC.* From Stu, SC;--广义笛卡尔积--等值连接,查询每个学生及其选修课的情况
select Stu.* ,SC.* From Stu, SC where Stu.sno = SC.sno;--查询计算机系学生的学号 姓名 所在系 选修的课程名及成绩
select SC.sno ,Sname,ssdept,SC.Cno,Cname,Grade From Stu ,SC,Course
where Stu.Sno = Sc.sno and Course.cno = SC.cno and ssdept = 'CS';--自身连接
select a1.Cname as major, a2.Cname as preMajor FROM Course a1,Course a2 where a1.Cpno = a2.cno--要起别名
嵌套查询


-----嵌套查询
SELECT Sname FROM Stu WHERE Sno In (SELECT Sno FROM SC WHERE Cno = 2); -- 不相关子查询SELECT Sname FROM Stu WHERE EXISTS(SELECT * FROM SC WHERE Cno = 2 AND Sno = Stu.Sno); -- 相关子查询SELECT Sname FROM Stu WHERE NOT EXISTS(SELECT * FROM SC WHERE Stu.Sno = Sno AND Cno = 1);--查询所有没选修1号课程的学生姓名--查询选了全部课程的学生
SELECT Sname From Stu
WHERE NOT EXISTS(SELECT Cname FROM  CourseWHERE  NOT EXISTS (SELECT * FROM SC WHERE Stu.sno = SC.sno and Course.cno = SC.cno))
集合操作

修改数据:

 -----修改UPDATE Stu SET Sage = 22 WHERE Sno = '95001'

删除数据:

数据控制语言

INDEX

定义索引

索引就是给某一列创建一个排序,使用查询语句时,如果创建的索引合适就会加速查询的速度,反过来索引会降低表更新或者插入的速度

VIEW

虚表,从一个或几个基本表导出的表 ,只存放视图的定义 不会出现数据冗余

定义视图:
建立
定义基于该视图的新视图
删除
常见视图形式:


删除视图

查询视图:
查询视图与查询基本表的方法基本一样

更新视图:

嵌入式SQL

DCL





数据库设计

数据库设计步骤

构造最优的数据模型,建立数据库及其应用系统的过程

数据分析 ->数据建模->关系数据库模式->关系数据库管理

数据库设计全过程:

规划阶段:

需求分析阶段:

概念设计阶段:
概念设计反映用户需求的数据库概念结构的概念模型,具有硬件独立,软件独立的特点。
局部概念模型->全局概念模型->评审
概念设计方法 ER方法 得到一个与DBMS无关的概念模型

逻辑设计阶段:
将概念模型转换成DBMS支持的数据模型相符合的逻辑结构
概念模型 -> 设计外模型 -> 设计应用程序与数据库的接口->评价模型->修正模型

物理设计阶段:
存储记录结构设计
确定数据存放位置
存取方法设计
完整性和安全性考虑
程序设计

数据库的实现:
用DDL定义数据库结构
组织数据入库
编制调试应用程序
数据库试运行

数据库的运行与维护:

小结:
数据库的各级模式是在设计过程中逐步形成的
需求分析阶段综合各个用户的应用需求
概念设计独立于机器特点,独立于各个DBMS产品的概念模式 用ER图来描述

概念设计工具
ER图:

ER模型组成元素:
实体 :对应客观世界的某一物体
实体集:多个实体组成
属性 :实体的某一个特征称为属性,在ER图中加下划线的为实体标识符

联系:表示一个或多个实体之间的关联关系


1:1 联系:两个实体集之间的实体一一对应
1:m 联系:实体集1中的每个实体对应实体及的多个实体,反过来实体集2的多个实体对应实体集1的一个实体

m: n 联系:实体集1的多个实体对应实体集2的多个实体

E模型概念设计的步骤:
设计局部ER模型,
综合局部ER模型得到全局模型
对全局模型优化得到最终ER模型

属性不可再分:如下图中的职称不能作为一个属性

如果联系有属性,就考虑把联系转化为实体


案例分析:


ER模型转换成关系模式:
步骤一:实体类型的转换
每个实体类型转换成一个关系模式,实体的属性即为关系模式的属性,实体标识符即为关系模式的键
步骤二:联系的转换
二元联系转化

案例:

ER模型的逻辑设计步骤:
导出初始关系模式集
规范化处理
模式评价
模式修正
设计子模式

小结:
ER模型的基本元素
联系的设计
采用ER模型的概念设计步骤
ER模型转化为关系模式

UML图



逻辑设计工具

针对一个问题,确定应该构几个关系,每个关系由哪些属性组成
规范化理论是数据库逻辑设计的工具

关系:描述实体及其属性、实体间的联系
关系模式: 用来定义关系
关系数据库:基于关系模型的数据库 利用关系来描述现实世界
关系数据库的模式: 定义这组关系的关系模式的全体


数据依赖:
定义属性间的相互关联。
函数依赖
平凡函数依赖与非平凡函数依赖
完全函数依赖与部分函数依赖
传递函数依赖

函数依赖:





多值依赖:
链接依赖:

关系模式的评价分析:
数据是否冗余过大
更新异常
插入异常
删除异常

对于不合适的关系模式可以分解模式

范式:
范式是数据库中关系满足一定要求的不同级别的集合

1NF

一个关系模式R中的所有属性都是不可分的基本数据项,关系数据库的基本要求

2NF

满足一范式的基础上,不存在部分函数依赖的关系模式

3NF

满足二范式的基础上,不存在传递函数依赖的关系模式

BC范式(达到BC范式即可满足一般要求)函数依赖的最高级别


小结:
规范换程度较低的范式会存在 插入异常 删除异常 修改复杂 数据冗余的问题,将低级范式转换为高级范式 的方法:模式分解




4NF

数据库管理

数据库安全性

只允许有合法使用权限的用户访问允许他存取的数据
非法使用数据库的情况:
用户绕过DBMS的数据库授权机制,通过操作系统直接存取 修改 备份数据库中的操作
通过多次查询数据,推到出本没有权限查看的数据

安全性控制方法:

定义存储权限:
数据对象,操作类型、
定义一个用户可以在那些对象上进行那些操作

检查存取权限:
键槽用户操作请求是否超出权限

授权粒度:
可以定义的数据对象的范围,粒度越细,授权越灵活

数据对象粒度:
数据库

属性列

GRANT 授权







REVOKE回收权限

可以将视图机制与授权机制配合使用

审计日志:将用户所有操作都记录

数据加密:
将原始数据转化为密文

并发安全控制

事务:

一致性:

隔离性:

持续性:


丢失修改:

不可重复读:


读脏数据:

并发控制:

可串行化的调度:

封锁

事务使用某个数据对象之前,对期加锁,限制其他事务对该数据的更新,是并发控制关键。

排他锁:

共享锁:

锁的相容表:

封锁粒度:

可以对整个数据库加锁,也可以只对某个属性加锁。

封锁协议:
何时申请加锁
持锁时间
何时释放

三级封锁协议: 保证数据一致性
一级封锁协议:

2级封锁协议:


三级封锁协议:



**两段锁协议:**保证并行可调度性


死锁和活锁:
活锁:


某个事务永远等待,解决办法,采用先来先服务策略

死锁

死锁预防:
一次封锁法
顺序封锁法

诊断并解除
超时法:事务等待超过一定时间,就任务发生了死锁
等待图法

故障和恢复

数据库故障:
事务故障:事务运行过程中,非正常终止
系统故障:计算机系统非正常结束,内存区数据丢失
介质故障: 外存中数据意外丢失
恢复:
数据转储:
将整个数据复制到另一个磁盘,解决介质故障

静态转储

动态转储

海量转储与增量转储

日志文件:



登录日志文件的数据:

事务故障恢复:


系统故障恢复:

小结:


数据库复制



数据库复制方式:


对等复制:

主从复制:

级联复制:

数据库复制要求:
用户透明
保持事务完整性
避免冲突

数据库镜像:
自动把整个数据库复制到另一个磁盘上,出现故障时,自动恢复。
实现X锁和S锁的控制

数据库原理 简单基础入门相关推荐

  1. C++ 高性能计算之多线程简单基础入门教程

    C/C++ 高性能计算之多线程简单基础入门教程 比起别人的盲目罗列函数接口,鹦鹉学舌式的解释每一个输入参数和输出参数,一味求全而无重点,我的文章更侧重于入门知识的讲解,宁缺毋滥,只有一些最简单的入门用 ...

  2. 开源的数据库,PostgreSQL 基础入门实战

    PostgreSQL 简介与安装 实验介绍 大家好,本课程是关于 PostgreSQL 数据库的使用说明,细致讲解 PostgreSQL 的特性与使用方法,尽量做到描述朴实.深入浅出.示例充足.覆盖重 ...

  3. 像学Excel一样国产SPL数据库,零基础入门(1)

    0.简单介绍 国产数据库,有java编写.根据官网所说,是超越SQL了: 具体介绍自己看官网. 为什么我要在CSDN写它的教程呢?首先是CSDN目前并没有任何人写关于它的教程,仅仅只有一些介绍推广. ...

  4. 音视频流媒体的原理以及基础入门知识

    https://zhuanlan.zhihu.com/p/232291020 https://zhuanlan.zhihu.com/p/231577193 https://zhuanlan.zhihu ...

  5. 后端基础入门技术栈简单小结(非常简单)

    后端基础入门技术栈简单小结(非常简单) 本文章同步更新于: 简书:https://www.jianshu.com/p/c8c6f10850e2 CSDN:https://blog.csdn.net/Z ...

  6. MySQL数据库的简单使用(基础篇)

    MySQL数据库的简单使用(基础篇) 学习说明 文章划分 三级模式的理解 安装及配置MySQL 登录MySQL(Windows下) 数据库操作 数据库引擎 MySQL执行外部的.sql文件 数据表的操 ...

  7. 【音视频零基础入门 1】视频播放器原理、流媒体协议、封装格式、视频编码、音频编码

    [音视频零基础入门 1]视频播放器原理.流媒体协议.封装格式.视频编码 一.视频播放器原理 1.1 解协议 1.2 解封装 1.3 解码 1.4 视音频同步 二.流媒体协议 三.封装格式 四.封装格式 ...

  8. 云小课|MRS基础原理之CarbonData入门

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:CarbonDat ...

  9. 简单的入门Android开发和Java语言基础[图]

    简单的入门Android开发和Java语言基础[图] 前言: 去年年底到今年年初,我做过简单的智能家居,也实现过一些简单的直连和远程的智能家居.于是就将最简单的通信发布出来:智能家居简单实现-使用ES ...

最新文章

  1. epoll监听文件_【原创】万字长文浅析:Epoll与Java Nio的那些事儿
  2. rust(39)-递归-阶乘与斐波那契数
  3. LeetCode 894. 所有可能的满二叉树(递归)
  4. 02 button的练习
  5. MySQL判断字符串是否是数字
  6. asp + Access 常见的数据库访问失败问题 Microsoft JET Database Engine 错误 '80004005' 解决办法...
  7. 用Python3.6操作HBase之HBase-Thrift
  8. python2.7 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5
  9. java eclipse 下载_JAVA下载安装及eclipse下载安装
  10. Solid angle to Arnold for Cinema4D破解教程
  11. javaWeb——日记本系统
  12. 传奇gee引擎,智能假人,假人脚本,geeM2假人
  13. Matlab中创建一个矩阵的3种常用方法
  14. 【自然语言处理】【细粒度情感分析】细粒度情感分析:了解文本情感的What、How、Why
  15. 树莓派模拟Switch手柄(amiibo)
  16. 泛函分析笔记(三) 拓扑空间的基本概念
  17. shopify api php 开发,Shopify 脚本 API 参考
  18. 为什么BAT干不掉海康威视
  19. 40个Python入门小程序
  20. 五金行业仓库管理系统实施的效果

热门文章

  1. 使用VirtualBox SDK之初步编译
  2. 电子商务之网购魅力何在?(网购用户行为分析)
  3. Git - 忽略的文件冲突解决
  4. WEB前端 从原生JavaScript到MVVM
  5. axios 最全 请求拦截器 响应拦截器 配置公共请求头 超时时间 以及get delete post put 四种请求传参方式
  6. python 线性回归 技术方案亮点_基于Python的线性回归实战
  7. mybatis集成 Invalid bound statement (not found)
  8. Spring Boot 对CORS跨域访问的配置
  9. CNN: TensorFlow 1.14.0 更新
  10. 三维重建4:Jacobian矩阵和Hessian矩阵