数据库技术基础

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

基本概念

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

三级模式/两级映像

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

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

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

数据库管理系统的特点

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

数据模型的三要素

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

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

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

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)

相关推荐
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪3 小时前
两次连接池泄露的BUG
java·数据库
TDengine (老段)5 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq7422349845 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE5 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy12393102166 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎6 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP6 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql
l1t6 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb
安当加密6 小时前
Nacos配置安全治理:把数据库密码从YAML里请出去
数据库·安全