数据库技术基础

根据希赛相关视频课程汇总整理而成,个人笔记,仅供参考。

基本概念

数据库通常是指有组织地、动态地存储在(外存上的相互联系的数据的集合)应用数据库主要目的是解决数据(共享)问题。

三级模式/两级映像

数据库系统设计员可通过外模式、概念模式和内模式来描述(视图层、逻辑层和物理层)上的数据特性;

数据库的视图、基本表和存储文件的结构分别对应(外模式、模式、内模式);

数据的物理独立性和数据的逻辑独立性是分别通过修改(模式/内模式)和(外模式/模式)的映像来保证的。

数据库管理系统的特点

数据库中数据(完整性 )是指数据库的正确性和相容性,以防止合法用户向数据库加入不符合语义 的数据;(安全性 )是指保护数据库,以防止不合法 地使用所造成的数据泄露、更改或破坏;(并发控制 )是指在多用户共享的系统中,保证数据库的完整性不受破坏,避免用户得到不正确的数据。

数据模型的三要素

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

概念数据模型是按用户的观点对数据和信息建模,强调其语义表达功能,易于用户理解。

数据仓库的基本特性
面向主题、数据是集成的、相对稳定和反映历史变化的

OLTP和OLAP

事务管理

事物的基本概念

定义

事务是一系列的数据库操作,是数据库应用程序的基本逻辑单位,即应用程序对数据库的操作都应该以事务的方式执行。

事务的四个特性(ACID)

①原子性(Atomicity)

"要么都做,要么都不做",是数据库环境中不可分割的逻辑工作单位

②一致性 (Consistency)
③隔离性 (Isolation)
④持久性(Durability)

SQL标准规定当一条SQL语句被执行,就隐式地开始了一个事务

ROLLBACK 事务回滚,表示事务非成功地结束;
COMMIT 事务提交,表示事务成功结束

数据库的并发控制

脏读:读取事务 未提交的 修改 之后的数据;

幻读:读取事务 未提交的 增删 之后的数据;

不可重复读:多次读取事务已经提交的数据;

解决并发操作带来的数据不一致性一般采用(封锁)

并发控制技术加锁
排它锁 (简称X锁) 又称写锁

如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁

共享锁 (简称S锁) 又称读锁

如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁

封锁协议

三级封锁协议
一级封锁协议 解决丢失更新问题;

事务T 在修改数据A之前必须先对其加上排他锁(不加锁直接修改数据是被禁止的,一定要加锁),直到事务结束才释放。

二级封锁协议 解决了读"脏"数据;不能保证可重复读;

在一级封锁协议的基础上,加上事务Y 在读取数据A之前先对其加共享锁,读完后即可释放共享锁

三级封锁协议 防止丢失修改、不读"脏"数据、防止了不可重复度

在一级封锁协议的基础上,加上事务Y 在读取数据A之前先对其加共享锁,知道整个事务全部完成后才释放共享锁。



两段锁协议

更加直接,可能产生死锁,是可串行化调度的充分条件(即满足可串行化的不一定遵循两段锁协议)

活锁和死锁

避免活锁解决方法

先来先服务

避免死锁解决方法

①采取一定的措施来预防死锁的发生;

②允许发生死锁,并采用一定手段定期诊断系统中是否有死锁,如果发现了死锁则立即解除掉

数据库的备份与恢复


数据库恢复 Undo/Redo

Undo

撤销事务 将未完成的事务撤销,使数据库恢复到执行前的正确状态;

Redo

重做事务 对已经提交的事务重新执行

事务故障的恢复由系统自动完成,对用户是透明的

系统故障的恢复是在系统重启之后自动执行的

介质故障的恢复需要DBA的介入

应用题训练1-数据库并发控制

题目:

同时预定时,可能会产生一个客户订不到或者把同一房订给两个客户

(1)出现问题:丢失修改,客户1预定a1数量房间后,对空房数量的修改被T2的修改覆盖,造成数据不一致。

(2)如上表:XLOCK(A),x1=R(A), W(A, x1-a1), XLOCK(B), UNLOCK(A), W(B1, a1), UNLOCK(B), XLOCK(A), x2=R(A), W(A, X2-A2), XLOCK(B),UNLOCK(A), W(B2,a2),UNLOCK(B)

相关推荐
自不量力的A同学18 分钟前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.20 分钟前
Mysql
数据库·mysql
全栈前端老曹1 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道1 小时前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议
逍遥德1 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring
笨蛋不要掉眼泪2 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap
Coder_Boy_2 小时前
基于SpringAI的在线考试系统-整体架构优化设计方案
java·数据库·人工智能·spring boot·架构·ddd
fen_fen10 小时前
Oracle建表语句示例
数据库·oracle
砚边数影12 小时前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库