数据库技术基础

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

基本概念

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

三级模式/两级映像

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

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

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

数据库管理系统的特点

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

数据模型的三要素

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

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

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

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)

相关推荐
Eiceblue9 分钟前
Python读取PDF:文本、图片与文档属性
数据库·python·pdf
敖云岚3 小时前
【Redis】分布式锁的介绍与演进之路
数据库·redis·分布式
LUCIAZZZ3 小时前
HikariCP数据库连接池原理解析
java·jvm·数据库·spring·springboot·线程池·连接池
我在北京coding4 小时前
300道GaussDB(WMS)题目及答案。
数据库·gaussdb
小Tomkk4 小时前
阿里云 RDS mysql 5.7 怎么 添加白名单 并链接数据库
数据库·mysql·阿里云
明月醉窗台5 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
沉到海底去吧Go5 小时前
【图片自动识别改名】识别图片中的文字并批量改名的工具,根据文字对图片批量改名,基于QT和腾讯OCR识别的实现方案
数据库·qt·ocr·图片识别自动改名·图片区域识别改名·pdf识别改名
老纪的技术唠嗑局6 小时前
重剑无锋,大巧不工 —— OceanBase 中的 Nest Loop Join 使用技巧分享
数据库·sql
未来之窗软件服务6 小时前
JAVASCRIPT 前端数据库-V6--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟·东方仙盟数据库
一只爱撸猫的程序猿7 小时前
构建一个简单的智能文档问答系统实例
数据库·spring boot·aigc