数据库系统概论笔记

第一章 数据库系统概论期末复习详解

一、数据库系统核心概念与课程体系

(一)课程定位与教材

  • 课程地位:计算机学科核心课程,国家级精品课程,对应教材为王珊、萨师煊编著的《数据库系统概论(第5版)》。
  • 教材内容架构
    模块涵盖章节学习要求
    基础篇绪论、关系数据库、SQL语言等本科生必读
    设计与应用篇关系数据理论、数据库设计等理论与实践结合
    系统篇查询优化、恢复技术、并发控制等本科生/研究生选读
    新技术篇第13-16章(数据库新技术)拓展知识

(二)数据库系统四大核心概念(重点)

  1. 数据(Data)

    • 定义:描述事物的符号记录,如数字、文字、图形、音频等。
    • 特点:数据与语义不可分割,例如“95”可表示成绩、体重等不同含义。
    • 示例:学生记录(李明,男,1995,江苏,计算机系,2013)。
  2. 数据库(Database, DB)

    • 定义:长期存储在计算机内、有组织、可共享的大量数据集合。
    • 起源:规范化“表(Table)”处理,由关系数据库之父E.F.Codd于1970年提出关系模型,奠定现代数据库基础。
    • 示例:学生信息表、成绩单表等相互关联的表集合。
  3. 数据库系统(Database System, DBS)

    • 组成:数据库(DB)、数据库管理系统(DBMS)、应用程序(DBAP)、数据库管理员(DBA)及计算机系统。
    • 关系:DBS包含DB和DBMS,如“学生管理系统”是DBS,其中“学生表”是DB,SQL Server是DBMS。
  4. 数据库管理系统(Database Management System, DBMS)

    • 定位:位于用户与操作系统之间的数据管理软件,如Oracle、MySQL。
    • 用户角度功能
      • 数据定义(DDL):创建表结构,如CREATE TABLE Student(...)
      • 数据操纵(DML):增删改查数据,如INSERT INTO Student VALUES(...)
      • 数据控制(DCL):权限管理与完整性约束,如GRANT SELECT ON Student TO user
      • 数据维护:备份、恢复、性能优化。
    • 系统角度功能:语言编译、查询优化、事务管理、安全控制等。

二、数据管理技术发展阶段(理解)

阶段时间硬件/软件背景特点缺点
人工管理阶段20世纪40-50年代无直接存取设备,无操作系统数据不保存,程序管理数据不共享、独立性差
文件系统阶段20世纪50-60年代磁盘出现,有文件系统数据长期保存,文件系统管理共享性差、冗余度高、一致性差
数据库系统阶段20世纪60年代至今大容量磁盘,DBMS出现数据结构化、共享性高、独立性强需DBMS统一管理

三、数据库系统特点(重点)

  1. 数据结构化

    • 整个组织的数据按某种模型(如关系模型)结构化,而非零散存储。
    • 示例:学生数据分为基本信息、选课记录等,通过学号关联。
  2. 冗余度低且易扩充

    • 数据面向整个系统而非单个应用,减少重复存储。
    • 示例:学生表和选课表共享学号,避免姓名等信息重复存储。
  3. 数据独立性高

    • 物理独立性:数据物理存储改变(如磁盘格式)时,应用程序无需修改,由DBMS的模式/内模式映像保证。
    • 逻辑独立性:数据逻辑结构改变(如增加字段)时,应用程序无需修改,由外模式/模式映像保证。
  4. 数据由DBMS统一管理和控制

    • 安全性保护:防止非法访问,如设置用户权限。
    • 完整性检查:保证数据正确性,如成绩必须在0-100之间。
    • 并发控制:协调多用户操作,避免数据冲突。
    • 数据库恢复:故障后恢复数据到正确状态。

四、数据模型(核心考点)

(一)数据模型分类与作用

  1. 概念模型(信息模型)

    • 面向用户,用于数据库设计,如E-R图。
    • 特点:语义表达能力强,易理解,如实体、属性、联系的抽象。
  2. 逻辑模型(DBMS支持)

    • 面向计算机系统,包括:
      • 关系模型:用二维表表示,如学生表、课程表。
      • 层次模型:树形结构(已淘汰)。
      • 网状模型:网状结构(已淘汰)。
  3. 物理模型

    • 描述数据在磁盘上的存储方式,如索引结构、存储路径。

(二)E-R图(概念模型表示方法,重点)

  1. 基本元素与表示

    • 实体:矩形,如学生课程
    • 属性:椭圆形,如学号姓名
    • 联系:菱形,如选修,标注联系类型(1:1、1:n、m:n)。
  2. 联系类型与实例

    • 1:1联系:如“班级”与“班长”(一个班级只有一个班长,一个班长只属于一个班级)。
    • 1:n联系:如“班级”与“学生”(一个班级有多个学生,一个学生只属于一个班级)。
    • m:n联系:如“学生”与“课程”(一个学生可选多门课,一门课可被多个学生选)。
  3. E-R图设计步骤

    1. 确定实体型(如仓库、零件、供应商)。
    2. 定义实体属性(如仓库号、面积)。
    3. 确定联系类型及属性(如“供应”联系的供应量)。

五、关系模型(重中之重)

(一)关系模型三要素

  1. 数据结构

    • 用二维表(关系)表示,表中每行是元组,每列是属性,码唯一标识元组。
    • 示例:
      -- 学生表(关系模式)
      Student(学号, 姓名, 性别, 年龄, 所属系)
      
    • 规范要求:每列不可再分(原子性),不允许表中套表。
  2. 数据操作

    • 集合操作:查询、插入、删除、修改,操作对象和结果均为关系。
    • 示例:SELECT * FROM Student WHERE 所属系='计算机'
  3. 完整性约束

    • 实体完整性:主码属性非空且唯一,如学号不能为NULL。
    • 参照完整性:外码取值需为被参照表的主码值或NULL,如选课表的学号必须存在于学生表中。
    • 用户定义完整性:自定义规则,如年龄在15-50之间,成绩在0-100之间。

(二)关系模式与术语对比

关系模型术语一般表格术语示例(学生表)
关系模式表头Student(学号, 姓名, 性别, …)
关系二维表整个学生信息表
元组行/记录某一行学生数据(如“张三”的记录)
属性“姓名”列
主键列“学号”列

六、概念模型向关系模型转换(设计核心)

(一)实体型转换规则

一个实体型转换为一个关系模式,属性为实体属性,码为实体码。

  • 示例:
    实体型:学生(学号,姓名,性别,年龄)→ 关系模式Student(学号, 姓名, 性别, 年龄),主键为“学号”。

(二)联系转换规则(重点)

  1. 1:1联系

    • 方案1:转换为独立关系模式,如管理(教师号, 班级号),主键为“教师号”或“班级号”。
    • 方案2:与任一端合并,如将“管理”联系合并到“班级”表:班级(班级号, 名称, 教师号),外键为“教师号”。
  2. 1:n联系

    • 方案1:独立关系模式,如组成(学号, 班级号, 排名),主键为“学号”。
    • 方案2:与n端合并,如学生(学号, 姓名, 班级号, 排名),外键为“班级号”。
  3. m:n联系

    • 必须转换为独立关系模式,码为各实体码的组合,如选课(学号, 课程号, 成绩),主键为“(学号, 课程号)”。
  4. 多元联系(三个及以上实体)

    • 转换为独立关系模式,码为各实体码组合,如供应(供应商号, 项目号, 零件号, 供应量),主键为“(供应商号, 项目号, 零件号)”。

七、数据库系统结构(三级模式与数据独立性)

(一)三级模式架构

  1. 模式(逻辑模式)

    • 全局逻辑结构,如学生、课程、选课的关系模式定义,一个数据库只有一个模式。
  2. 外模式(子模式/用户模式)

    • 用户视角的局部数据视图,如“学生成绩查询视图”只包含学号、姓名、课程名、成绩,一个数据库可有多外模式。
  3. 内模式(存储模式)

    • 数据物理存储结构,如索引文件、数据块分布,一个数据库只有一个内模式。

(二)二级映像与数据独立性

  1. 外模式/模式映像

    • 作用:保证逻辑独立性。当模式改变(如增加“入学年份”字段),修改映像使外模式不变,应用程序无需修改。
  2. 模式/内模式映像

    • 作用:保证物理独立性。当存储结构改变(如更换磁盘存储方式),修改映像使模式不变,应用程序无需修改。

八、典型DBMS与考试要点

(一)主流DBMS

Oracle、DB2、SQL Server、MySQL(开源),均支持关系模型。

(二)常见题型与考点

  1. 单选题

    • 例:( )是存储在计算机内有结构的数据的集合。(答案:B. 数据库)
    • 考点:DB、DBS、DBMS的概念区分。
  2. 应用题

    • 例:画出“学生-课程-教师”的E-R图,并转换为关系模式。
    • 要点:确定m:n联系(学生选课)、1:n联系(教师授课),正确标注主键和外键。
  3. 概念辨析

    • 例:解释“逻辑独立性”与“物理独立性”的区别。
    • 答:逻辑独立性由外模式/模式映像保证,物理独立性由模式/内模式映像保证,前者针对逻辑结构修改,后者针对物理存储修改。

本章核心考点总结

  • 四大概念(数据、DB、DBS、DBMS)的定义与关系;
  • E-R图的绘制与联系类型判断;
  • 关系模型三要素及完整性约束;
  • 概念模型向关系模型的转换规则;
  • 三级模式与数据独立性的原理。

第二章 关系数据库期末复习详解

一、关系数据结构的形式化定义

(一)核心概念与基础术语

  1. 域(Domain)

    • 定义:一组具有相同数据类型的值的集合,如整数、字符串、{男,女}等。
    • 例:年龄的域为[15, 50],性别域为{男,女}。
  2. 笛卡尔积(Cartesian Product)

    • 定义:给定域D₁,D₂,…,Dₙ,其笛卡尔积为所有可能的元组组合,记作D₁×D₂×…×Dₙ。
    • 公式:若Dᵢ的基数为mᵢ,则笛卡尔积的基数M=∏mᵢ。
    • 例:D₁={张清玫,刘逸},D₂={计算机专业,信息专业},则D₁×D₂有2×2=4个元组。
  3. 关系(Relation)

    • 定义:笛卡尔积的子集,用二维表表示,表中每行是元组,每列是属性。
    • 性质:
      • 列同质(同类型数据);
      • 元组无重复,顺序可交换;
      • 分量为原子值(不可再分)。
  4. 关系模式(Relation Schema)

    • 定义:对关系的描述,形式为R(U,D,DOM,F),简记为R(A₁,A₂,…,Aₙ)。
    • 例:学生表模式Student(Sno,Sname,Ssex,Sage,Sdept)。

(二)关系的型与值

  • 关系模式(型):静态描述,如Student表的结构。
  • 关系(值):动态实例,如某时刻Student表中的具体数据。

二、关系代数运算(核心考点)

(一)传统集合运算(要求表结构相同)

运算定义示例(R与S结构均为A,B,C)
并(∪)属于R或S的元组R∪S = {t
差(-)属于R但不属于S的元组R-S = {t
交(∩)同时属于R和S的元组R∩S = {t
笛卡尔积(×)R×S的所有元组组合若R有m行n列,S有p行q列,则R×S有m×p行n+q列


R = { (a1,b1,c1), (a1,b2,c2) },
S = { (a1,b2,c2), (a2,b2,c1) },

  • R∪S = { (a1,b1,c1), (a1,b2,c2), (a2,b2,c1) }
  • R-S = { (a1,b1,c1) }

(二)专门的关系运算

1. 选择(Selection)
  • 定义:从关系R中选取满足条件F的元组,记为σ₉®。
  • 示例:查询信息系学生:
    σₛₚₑₚₜ='IS'(Student)σ₅='IS'(Student)(5表示第5列)。
2. 投影(Projection)
  • 定义:从R中选取若干属性列组成新关系,记为πₐ®。
  • 示例:查询学生学号和姓名:
    πₛₙₒ,ₛₙₐₘₑ(Student)π₁,₂(Student)
3. 连接(Join)
  • θ连接:从R×S中选取AθB的元组,记为R ⋈ₐθB S。
    • 等值连接(θ=“=”):选取A=B的元组。
    • 自然连接:特殊等值连接,要求A=B且去重重复列,记为R ⋈ S。
  • 外连接:保留悬浮元组(未匹配元组):
    • 左外连接:保留左表全部元组;
    • 右外连接:保留右表全部元组;
    • 全外连接:保留左右表全部元组。

:R(A,B,C)与S(B,E)的自然连接:

R ⋈ S = { t | t∈R×S 且 R.B=S.B }  
4. 除(Division)
  • 定义:给定R(X,Y)和S(Y,Z),R÷S结果为R中满足“X的象集包含S在Y上投影”的元组在X上的投影。
  • 示例:查询选修全部课程的学生学号:
    πₛₙₒ,ₙₒ(SC) ÷ πₙₒ(Course)

三、关系运算综合应用

(一)典型查询案例

例1:基础查询
  • 需求:查询年龄<20岁的男生学号和姓名。
  • 关系代数
    πₛₙₒ,ₛₙₐₘₑ(σₛₐ₉ₑ<20∧ₛₛₑₓ='男'(Student))
例2:连接查询
  • 需求:查询学生学号、姓名及选课成绩(包括未选课学生)。
  • 关系代数
    Student ⋈ₗₑ₣ₜ SC(左外连接),结果保留Student全部元组,SC无匹配时成绩为NULL。
例3:除运算应用
  • 需求:查询选修课程号为1和3的学生学号。
  • 步骤
    1. 构造临时关系S={1,3};
    2. 计算πₛₙₒ,ₙₒ(SC) ÷ S

(二)易混淆概念对比

运算区别
自然连接 vs 等值连接自然连接自动去重重复属性,等值连接需显式指定A=B,可能保留重复列
内连接 vs 外连接内连接仅保留匹配元组,外连接保留悬浮元组
投影 vs 选择投影按列筛选,选择按行筛选

四、关系完整性约束(本章简提,后续深入)

  1. 实体完整性:主码非空且唯一。
  2. 参照完整性:外码取值为被参照表主码值或NULL。
  3. 用户定义完整性:如成绩∈[0,100]。

五、本章核心考点总结

  1. 关系数据结构:域、笛卡尔积、关系的性质。
  2. 关系代数运算
    • 传统运算:并、差、交、笛卡尔积的条件与结果;
    • 专门运算:选择、投影的条件书写,连接(尤其是自然连接)的步骤,除运算的逻辑。
  3. 典型查询:多表连接、外连接应用、除运算解决“全部选修”问题。

复习建议:通过具体例题练习关系代数表达式的书写,重点掌握自然连接、外连接和除运算的逻辑,理解运算结果与实际需求的对应关系。

第三章 SQL语言期末复习详解

一、SQL数据定义

(一)数据库操作

  1. 创建数据库

    CREATE DATABASE 数据库名  
    ON [PRIMARY] (  
        NAME = 逻辑文件名,  
        FILENAME = '物理文件路径',  
        SIZE = 初始大小,  
        MAXSIZE = 最大大小,  
        FILEGROWTH = 增长比例  
    )  
    LOG ON (  
        NAME = 日志逻辑名,  
        FILENAME = '日志文件路径',  
        ...  
    );  
    

    :创建mydb数据库,主数据文件初始5MB,日志文件初始3MB:

    CREATE DATABASE mydb  
    ON (NAME = mydb_data, FILENAME = 'd:\data\mydb_data.mdf', SIZE = 5MB, FILEGROWTH = 2MB)  
    LOG ON (NAME = mydb_log, FILENAME = 'd:\data\mydb_log.ldf', SIZE = 3MB);  
    
  2. 修改数据库

    • 添加数据文件:
      ALTER DATABASE 数据库名 ADD FILE (NAME = 文件名, ...) TO FILEGROUP 组名;  
      
    • 添加日志文件:
      ALTER DATABASE 数据库名 ADD LOG FILE (NAME = 日志名, ...);  
      
    • 删除文件/文件组(需先清空文件):
      ALTER DATABASE 数据库名 REMOVE FILE 逻辑名;  
      
  3. 删除数据库

    DROP DATABASE 数据库名;  
    

(二)表操作

  1. 创建表

    CREATE TABLE 表名 (  
        列名 数据类型 [NULL/NOT NULL],  
        列名 数据类型 [DEFAULT 默认值],  
        [PRIMARY KEY (列名)],  
        [FOREIGN KEY (列名) REFERENCES 主表(主键列)]  
    );  
    

    :创建学生表:

    CREATE TABLE Student (  
        Sno CHAR(9) PRIMARY KEY,  
        Sname VARCHAR(20) NOT NULL,  
        Ssex CHAR(2) DEFAULT '男',  
        Sdept VARCHAR(20)  
    );  
    
  2. 修改表结构

    • 添加列:
      ALTER TABLE 表名 ADD 新列名 数据类型 [约束];  
      
    • 修改列:
      ALTER TABLE 表名 ALTER COLUMN 列名 新数据类型;  
      
    • 删除列:
      ALTER TABLE 表名 DROP COLUMN 列名;  
      
  3. 删除表

    DROP TABLE 表名;  
    

(三)索引操作

  1. 创建索引

    • 普通索引:
      CREATE INDEX 索引名 ON 表名(列名 [ASC/DESC]);  
      
    • 唯一索引:
      CREATE UNIQUE INDEX 索引名 ON 表名(列名);  
      
    • 聚簇索引(物理排序):
      CREATE CLUSTERED INDEX 索引名 ON 表名(列名);  
      
  2. 删除索引

    DROP INDEX 表名.索引名;  
    

二、SQL数据查询(核心考点)

(一)单表查询

  1. 基本语法

    SELECT [DISTINCT] 列名1, 列名2,...  
    FROM 表名  
    [WHERE 条件]  
    [ORDER BY 列名 [ASC/DESC]];  
    
  2. 条件查询

    • 比较运算符:=, >, <, BETWEEN...AND, IN
    • 模糊查询:LIKE '%pattern%'%任意长度,_单个字符)
    • 空值判断:IS NULL / IS NOT NULL
      :查询信息系(IS)年龄<20岁的学生:
    SELECT Sname, Sage  
    FROM Student  
    WHERE Sdept = 'IS' AND Sage < 20;  
    

(二)聚集查询

  1. 聚集函数

    • COUNT(*):计数
    • SUM(列):求和
    • AVG(列):平均
    • MAX/MIN(列):最大/最小值
      :查询各系平均年龄:
    SELECT Sdept, AVG(Sage)  
    FROM Student  
    GROUP BY Sdept;  
    
  2. 分组与筛选

    • GROUP BY:分组
    • HAVING:分组后筛选(区别于WHERE
      :查询选课数≥2的学生学号:
    SELECT Sno, COUNT(Cno)  
    FROM SC  
    GROUP BY Sno  
    HAVING COUNT(Cno) >= 2;  
    

(三)连接查询

  1. 内连接(INNER JOIN)

    SELECT 列名  
    FROM1 [INNER] JOIN2 ON1.=2.;  
    

    :查询学生成绩:

    SELECT Student.Sno, Sname, Grade  
    FROM Student JOIN SC ON Student.Sno = SC.Sno;  
    
  2. 外连接

    • 左外连接(保留左表全部):
      SELECT ... FROM1 LEFT [OUTER] JOIN2 ON 条件;  
      
    • 右外连接(保留右表全部):
      SELECT ... FROM1 RIGHT [OUTER] JOIN2 ON 条件;  
      
    • 全外连接(保留两表全部):
      SELECT ... FROM1 FULL [OUTER] JOIN2 ON 条件;  
      
  3. 自身连接
    :查询课程先修课:

    SELECT C1.Cno, C2.Cpno  
    FROM Course C1 JOIN Course C2 ON C1.Cpno = C2.Cno;  
    

(四)嵌套查询

  1. IN子查询
    :查询与“刘晨”同系的学生:

    SELECT Sname FROM Student  
    WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname = '刘晨');  
    
  2. 比较运算符子查询
    :查询年龄大于平均年龄的学生:

    SELECT Sname FROM Student  
    WHERE Sage > (SELECT AVG(Sage) FROM Student);  
    
  3. EXISTS子查询(相关子查询)
    :查询选修了1号课程的学生:

    SELECT Sname FROM Student  
    WHERE EXISTS (SELECT * FROM SC WHERE Sno = Student.Sno AND Cno = '1');  
    

(五)集合查询

  1. 并(UNION):去重合并

    SELECT ... FROM1 UNION SELECT ... FROM2;  
    
  2. 交(INTERSECT):取公共部分

    SELECT ... FROM1 INTERSECT SELECT ... FROM2;  
    
  3. 差(EXCEPT):左表减右表

    SELECT ... FROM1 EXCEPT SELECT ... FROM2;  
    

三、SQL数据更新

(一)插入数据

  1. 单条插入

    INSERT INTO 表名(1,2) VALUES(1,2);  
    

    :插入学生记录:

    INSERT INTO Student(Sno, Sname, Sdept) VALUES('2023001', '张三', 'CS');  
    
  2. 子查询插入

    INSERT INTO 表名 SELECT ... FROM2;  
    

(二)修改数据

UPDATE 表名 SET1=1,2=2 WHERE 条件;  

:将CS系学生年龄+1:

UPDATE Student SET Sage = Sage + 1 WHERE Sdept = 'CS';  

(三)删除数据

DELETE FROM 表名 WHERE 条件;  

:删除未选课学生:

DELETE FROM Student WHERE Sno NOT IN (SELECT Sno FROM SC);  

四、视图(View)

(一)创建视图

CREATE VIEW 视图名 AS SELECT ... FROMWHERE 条件;  

:创建信息系学生视图:

CREATE VIEW IS_Student AS  
SELECT Sno, Sname, Sage FROM Student WHERE Sdept = 'IS';  

(二)使用视图

SELECT ... FROM 视图名 WHERE 条件;  

(三)删除视图

DROP VIEW 视图名;  

五、核心考点总结

  1. SQL语句结构SELECT-FROM-WHERE-GROUP BY-HAVING-ORDER BY的执行顺序。
  2. 连接查询:内连接、外连接的区别与应用场景。
  3. 嵌套查询INEXISTSANY/ALL的使用,相关子查询与不相关子查询的区别。
  4. 数据完整性:主键、外键、默认值等约束的创建与作用。
  5. 性能优化:索引的合理创建,避免全表扫描。

复习建议:通过大量练习掌握SQL语句书写,重点关注连接查询和嵌套查询的复杂场景,理解视图与表的本质区别,以及数据更新时的完整性约束规则。

第四章 数据库安全性期末复习总结

一、数据库安全性概述

(一)基本概念

  1. 定义:保护数据库免受非法使用,防止数据泄露、更改或破坏。
  2. 威胁来源
    • 非授权用户的恶意存取和破坏(如黑客假冒合法用户)。
    • 敏感数据泄露(如军事、金融数据被窃取)。
    • 安全环境脆弱(如操作系统、网络协议漏洞)。

(二)安全性控制层次

  1. 用户标识与鉴定:最外层保护,验证用户身份(如静态口令、动态口令、生物特征)。
  2. 存取控制:限制用户对数据对象的操作权限。
  3. 视图机制:屏蔽敏感数据,仅向用户暴露允许访问的数据。
  4. 审计:记录用户操作,追踪非法行为。
  5. 密码存储:加密存储数据,防止明文泄露。

二、存取控制技术(核心考点)

(一)自主存取控制(DAC)

  1. 权限定义:用户对不同数据对象有不同权限,可转授权限。

  2. SQL实现

    • 授权GRANT <权限> ON <对象> TO <用户> [WITH GRANT OPTION]
      • 例:授予U1对Student表的查询权限:
        GRANT SELECT ON TABLE Student TO U1;  
        
    • 转授权限:若指定WITH GRANT OPTION,用户可将权限再授予他人。
    • 收回权限REVOKE <权限> ON <对象> FROM <用户> [CASCADE]
      • 例:收回U1对Student表的更新权限:
        REVOKE UPDATE ON TABLE Student FROM U1;  
        
  3. 权限对象与操作

    对象类型对象操作类型
    数据库模式模式CREATE SCHEMA
    基本表CREATE TABLE、ALTER TABLE、SELECT等
    视图视图CREATE VIEW、SELECT等
    数据表/视图属性列SELECT、INSERT、UPDATE等

(二)强制存取控制(MAC)

  1. 核心思想:对数据和用户强制标记密级,用户只能按密级访问数据。
  2. 敏感标记
    • 主体(用户/进程):许可证级别(如绝密TS、机密S、可信C、公开P)。
    • 客体(数据对象):密级(同上)。
  3. 访问规则
    • 读取:主体许可证级别 ≥ 客体密级。
    • 写入:主体许可证级别 ≤ 客体密级。

三、角色与权限管理

(一)角色的作用

  • 简化权限管理,将相同权限打包分配给多个用户。
  • 例:创建角色R1并授权:
    CREATE ROLE R1;  
    GRANT SELECT, INSERT ON TABLE Student TO R1;  
    GRANT R1 TO 王平, 张明;  -- 授予用户角色  
    

(二)固定角色分类

  1. 服务器角色(如sysadmin、dbcreator):管理服务器级权限。
  2. 数据库角色(如db_owner、db_datareader):管理数据库级权限。

四、视图与安全性

  1. 屏蔽敏感数据:通过视图限制用户可见数据。
    • 例:创建CS系学生视图并授权:
      CREATE VIEW CS_Student AS SELECT * FROM Student WHERE Sdept='CS';  
      GRANT SELECT ON CS_Student TO 王平;  
      
  2. 与授权结合:视图+权限进一步细化控制。

五、审计与数据加密

(一)审计(Audit)

  1. 功能:记录用户对数据库的操作,用于追踪非法行为。
  2. 适用场景:高安全需求系统(如银行、军事)。

(二)数据加密

  1. 目的:防止数据在存储和传输中泄露。
  2. 分类
    • 存储加密:加密存储数据文件。
    • 传输加密:加密网络传输数据。

六、典型例题与考点

(一)选择题高频考点

  1. 存取控制核心语句:GRANT(授权)和REVOKE(收权)用于维护数据库安全性。
  2. 视图的作用:提高数据库安全性,屏蔽敏感数据。
  3. 强制存取控制规则:主体读数据需许可证级别≥客体密级,写数据需≤客体密级。

(二)应用题示例

:简述自主存取控制与强制存取控制的区别。

  • 自主存取控制:用户自主管理权限,可转授,灵活性高但安全性较低。
  • 强制存取控制:系统强制管理密级,用户无法自主修改,安全性更高,适用于密级严格场景。

七、本章总结

数据库安全性通过多层控制实现,核心是存取控制技术。自主存取控制通过GRANT/REVOKE实现灵活权限管理,强制存取控制通过密级标记实现更严格的安全保障。视图、审计和加密作为补充手段,共同构建完整的安全体系。复习时需重点掌握SQL授权语句的使用及角色管理,理解不同安全技术的应用场景。

第五章 数据库完整性期末复习总结

一、数据库完整性概述

(一)基本概念

  1. 定义:保证数据的正确性(符合语义)和相容性(不同表间逻辑一致)。
    • 例:学号唯一、年龄范围合法、选课必须存在对应课程。
  2. 与安全性的区别
    • 安全性:防止非法访问(防范非法用户);
    • 完整性:防止不合语义的数据(防范无效数据)。

(二)完整性约束类型

  1. 实体完整性:主码非空且唯一。
  2. 参照完整性:外码需引用主码或为空。
  3. 用户定义完整性:自定义语义约束(如年龄范围、性别限制)。

二、实体完整性与参照完整性

(一)实体完整性(主码约束)

  1. 定义方式
    CREATE TABLE Student (  
        Sno CHAR(9) PRIMARY KEY,  -- 列级定义主码  
        Sname CHAR(20) NOT NULL,  
        ...  
    );  
    
  2. 检查机制
    • 插入/修改时检查主码唯一性(通过索引快速查询,避免全表扫描)。

(二)参照完整性(外码约束)

  1. 定义方式
    CREATE TABLE SC (  
        Sno CHAR(9),  
        Cno CHAR(4),  
        Grade SMALLINT,  
        PRIMARY KEY (Sno, Cno),  
        FOREIGN KEY (Sno) REFERENCES Student(Sno),  -- 外码引用  
        FOREIGN KEY (Cno) REFERENCES Course(Cno)  
    );  
    
  2. 违约处理
    • NO ACTION(默认):拒绝操作;
    • CASCADE:级联更新/删除;
    • SET NULL:设为空值。
    -- 级联删除示例  
    FOREIGN KEY (Sno) REFERENCES Student(Sno) ON DELETE CASCADE;  
    

三、用户定义完整性

(一)属性级约束

  1. 非空约束NOT NULL
  2. 唯一约束UNIQUE
  3. 检查约束CHECK
    CREATE TABLE Student (  
        Sage SMALLINT CHECK (Sage BETWEEN 14 AND 50),  
        Ssex CHAR(2) CHECK (Ssex IN ('男', '女'))  
    );  
    

(二)元组级约束

  • 跨属性约束(如性别与姓名的关联):
    CREATE TABLE Student (  
        ...  
        CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')  -- 元组级约束  
    );  
    

(三)完整性约束命名与修改

  1. 命名子句
    CREATE TABLE Student (  
        Sno NUMERIC(6) CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),  
        ...  
    );  
    
  2. 修改约束
    ALTER TABLE Student DROP CONSTRAINT C1;  -- 删除约束  
    ALTER TABLE Student ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999);  -- 添加新约束  
    

四、断言(Assertion)

  • 功能:定义跨表或聚集操作的复杂约束,任何更新触发检查。
  • 创建方式
    -- 限制每门课程最多60人选修  
    CREATE ASSERTION ASSE_SC_CNUM1  
    CHECK (60 >= ALL (SELECT COUNT(*) FROM SC GROUP BY Cno));  
    
  • 删除方式
    DROP ASSERTION ASSE_SC_CNUM1;  
    

五、T-SQL基础(补充)

(一)变量与赋值

  1. 局部变量:以@开头,需先声明后使用。
    DECLARE @Sno CHAR(9), @Grade INT;  
    SET @Grade = 90;  -- 单变量赋值  
    SELECT @Sno = Sno FROM Student WHERE Sname = '张三';  -- 从查询赋值  
    
  2. 表变量:临时存储结果集。
    DECLARE @MyTable TABLE (Sno CHAR(9), AvgGrade FLOAT);  
    INSERT INTO @MyTable SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno;  
    

(二)流程控制

  1. IF语句
    IF (SELECT AVG(Grade) FROM SC WHERE Sno='201215121') < 75  
    BEGIN  
        UPDATE SC SET Grade = Grade * 1.05 WHERE Sno='201215121';  
        IF (SELECT MIN(Grade) FROM SC WHERE Sno='201215121') >= 60  
            BREAK;  -- 跳出循环  
    END  
    
  2. CASE语句
    -- 成绩等级转换  
    SELECT Grade,  
        CASE  
            WHEN Grade >= 90 THEN '优'  
            WHEN Grade >= 80 THEN '良'  
            ...  
            ELSE '不及格'  
        END AS GradeLevel  
    FROM SC;  
    
  3. WHILE循环
    DECLARE @i INT = 1, @sum INT = 0;  
    WHILE @i <= 10  
    BEGIN  
        SET @sum = @sum + @i;  
        SET @i = @i + 1;  
    END;  
    

六、触发器(Trigger)

(一)触发器类型

  1. AFTER触发器:在DML操作后触发。
  2. INSTEAD OF触发器:替代原始操作(可用于视图)。

(二)触发事件

  • INSERTUPDATEDELETE(可组合使用)。

(三)临时表机制

操作inserted表deleted表
INSERT存储新插入行
DELETE存储删除行
UPDATE存储更新后行存储更新前行

(四)实例:插入检查

-- 限制只有女生能选7号课程  
CREATE TRIGGER tr_sc_insert  
ON SC  
AFTER INSERT  
AS  
BEGIN  
    DECLARE @Sno CHAR(9), @Cno CHAR(4);  
    SELECT @Sno = Sno, @Cno = Cno FROM inserted;  
    IF @Cno = '7' AND NOT EXISTS (SELECT 1 FROM Student WHERE Sno=@Sno AND Ssex='女')  
    BEGIN  
        PRINT '选7号课程的必须是女生';  
        ROLLBACK TRANSACTION;  -- 回滚操作  
    END  
END;  

(五)实例:更新检查

-- 年龄修改时新值必须大于旧值  
CREATE TRIGGER tr_student_sage  
ON Student  
AFTER UPDATE  
AS  
BEGIN  
    IF EXISTS (SELECT 1 FROM inserted i JOIN deleted d ON i.Sno=d.Sno WHERE i.Sage <= d.Sage)  
    BEGIN  
        PRINT '年龄必须增大';  
        ROLLBACK TRANSACTION;  
    END  
END;  

(六)实例:删除日志

-- 删除SC记录时备份到SC1  
CREATE TRIGGER tr_sc_delete  
ON SC  
AFTER DELETE  
AS  
BEGIN  
    INSERT INTO SC1 SELECT * FROM deleted;  
END;  

七、核心考点总结

  1. 完整性约束语法:主码、外码、CHECK约束的定义与应用。
  2. 参照完整性违约处理:NO ACTION、CASCADE、SET NULL的区别。
  3. 触发器工作原理:inserted/deleted表的作用,触发时机选择。
  4. T-SQL流程控制:IF、CASE、WHILE在触发器中的应用。
  5. 断言与触发器的选择:复杂跨表约束用断言,实时数据检查用触发器。

复习建议:通过实际案例练习约束定义和触发器编写,重点掌握外码级联规则和触发器临时表的使用逻辑。

第六章 关系数据库理论期末复习总结

一、关系模式设计问题

(一)数据依赖与异常

  1. 问题示例
    • 单一模式Student(Sno, Sname, Sdept, Mname, Cno, Grade)
    • 问题:数据冗余(系主任姓名重复)、更新异常(修改系主任需更新所有相关元组)、插入异常(未选课学生信息无法插入)、删除异常(删除课程可能丢失学生信息)。
  2. 解决方案:分解为高范式关系模式,如:
    S(Sno, Sname, Sdept),  
    DEPT(Sdept, Mname),  
    SC(Sno, Cno, Grade)  
    

二、函数依赖(核心概念)

(一)基本定义

  1. 函数依赖(X→Y):若X值确定,Y值唯一确定。
    • 例:Sno→Sname(Sno,Cno)→Grade
  2. 分类
    • 平凡/非平凡:若Y⊆X为平凡依赖(如(Sno,Cno)→Cno),否则非平凡。
    • 完全/部分:Y完全依赖X((Sno,Cno)→Grade),否则部分依赖((Sno,Cno)→Sdept,因Sno→Sdept)。
    • 传递依赖:若X→Y,Y→Z且Y↛X,则X→Z传递依赖(如Sno→Sdept→Mname)。

(二)Armstrong公理系统

  1. 推理规则
    • 自反律:Y⊆X→X→Y。
    • 增广律:X→Y→XZ→YZ。
    • 传递律:X→Y,Y→Z→X→Z。
  2. 导出规则
    • 合并规则:X→Y,X→Z→X→YZ。
    • 分解规则:X→YZ→X→Y,X→Z。
  3. 属性闭包
    • 定义X_F⁺为X能决定的所有属性。
    • 算法:从X出发,反复添加能由X决定的属性,直至无法扩展。
    • 应用:判断函数依赖是否成立(如AC→D是否成立,计算(AC)_F⁺是否包含D)。

三、范式(Normal Form)

(一)各级范式定义与判断

范式定义条件核心要求示例
1NF属性不可再分无复合属性Student初始模式
2NF非主属性完全依赖码消除部分依赖分解后SC(Sno,Cno,Grade)
3NF非主属性无传递依赖消除传递依赖分解后S(Sno,Sname,Sdept)
BCNF所有函数依赖的决定因素是超键主属性无不良依赖SJP(S,J,P)(候选码(S,J)和(J,P))

(二)规范化步骤

  1. 1NF→2NF:消除非主属性对码的部分依赖。
    • 例:Student分解为SD(Sno,Sname,Sdept,Mname)SC(Sno,Cno,Grade)
  2. 2NF→3NF:消除非主属性对码的传递依赖。
    • 例:SD分解为S(Sno,Sname,Sdept)Dept(Sdept,Mname)
  3. 3NF→BCNF:消除主属性对码的不良依赖。
    • 例:STJ(S,T,J)(T→J)分解为ST(S,T)TJ(T,J)

四、模式分解(关键技术)

(一)分解原则

  1. 无损连接性:分解后能通过自然连接还原原关系。
  2. 保持函数依赖:分解后函数依赖集不变。

(二)分解方法示例

  1. 问题模式Teacher(tnum,tname,dept,manager,address,cnum,cname,score)
    • 函数依赖:tnum→tname, tnum→dept, dept→manager, dept→address, cnum→cname, (tnum,cnum)→score
    • 候选码:(tnum,cnum)
  2. 分解步骤
    • →2NF:消除部分依赖,分解为:
      T(tnum,tname,dept,manager,address),  
      C(cnum,cname),  
      TC(tnum,cnum,score)  
      
    • →3NF:消除传递依赖,分解为:
      T(tnum,tname,dept),  
      D(dept,manager,address),  
      C(cnum,cname),  
      TC(tnum,cnum,score)  
      

五、核心考点与解题思路

(一)候选码求解

  1. 步骤
    • 找出所有不在函数依赖右侧出现的属性,构成初始集P。
    • 计算P的闭包,若P⁺=U则P为候选码;否则添加属性直至闭包为U。
  2. R(A,B,C,D), F={AB→C, C→D, D→A}
    • 右侧无B,P={B},计算B⁺=B≠U,添加A得AB⁺=ABCD=U,候选码为AB。

(二)范式判断步骤

  1. 1NF:检查属性是否原子。
  2. 2NF:检查非主属性是否完全依赖码(部分依赖存在则≠2NF)。
  3. 3NF:检查非主属性是否传递依赖码(传递依赖存在则≠3NF)。
  4. BCNF:检查所有函数依赖的决定因素是否为超键。

(三)典型例题

  • 题目supply(sno,pno,scity,status,qty), F={sno→scity, scity→status, (sno,pno)→qty}
    1. 候选码:(sno,pno)(因(sno,pno)_F⁺=sno,pno,scity,status,qty)。
    2. 范式:2NF(status传递依赖于(sno,pno),因sno→scity→status)。
    3. 分解
      S(sno,scity,status),  
      SP(sno,pno,qty)  
      

六、总结与注意事项

  1. 规范化目的:解决数据冗余和异常,提升数据一致性。
  2. 并非越高越好:需平衡规范化与应用需求(如偶尔冗余可提高查询效率)。
  3. 核心工具:属性闭包计算、函数依赖推导、模式分解算法。

复习建议:通过具体案例练习范式判断和分解,熟练掌握Armstrong公理及闭包计算步骤。

第八章 数据库编程期末复习总结

一、嵌入式SQL

(一)基本概念

  • 定义:将SQL语句嵌入到C、C++、Java等主语言中,形成嵌入式SQL程序。
  • 两种使用方式
    • 交互式SQL:直接在数据库客户端执行。
    • 嵌入式SQL:需与主语言结合,需进行必要扩充(如宿主变量、游标处理)。

二、存储过程(核心考点)

(一)存储过程概述

  1. 定义:一组预编译的SQL语句集,存储在数据库中,可通过名称调用。

  2. 优点

    • 模块化编程:封装重复逻辑,可重用。
    • 快速执行:编译后存储,执行效率高。
    • 减少网络通信:客户端只需调用存储过程名,而非传输多条SQL。
    • 安全机制:可控制用户对存储过程的访问权限。
  3. 分类

    • 系统存储过程:以sp_为前缀,由SQL Server提供(如sp_addrolemember)。
    • 用户自定义存储过程:用户创建,完成特定功能。

(二)存储过程的创建与调用

  1. 创建语法

    CREATE PROC[EDURE] 存储过程名 [@参数 数据类型=默认值 [OUTPUT]]  
    [WITH ENCRYPTION]  
    AS  
    SQL语句集;  
    
    • 示例:计算两数之和
      CREATE PROCEDURE add_two @p1 INT, @p2 INT  
      AS  
      DECLARE @sum INT  
      SET @sum = @p1 + @p2  
      PRINT @sum;  
      
  2. 调用语法

    EXEC[UTE] 存储过程名 [@参数=| @变量 [OUTPUT]];  
    
    • 示例:调用add_two
      EXEC add_two 120, 50;  -- 直接传值  
      EXEC add_two @p2=50, @p1=120;  -- 命名参数传值  
      

(三)参数处理

  1. 输入参数:默认参数,用于传入数据(如查询条件)。
    CREATE PROCEDURE usp_getcourse @name VARCHAR(40)='%'  
    AS  
    SELECT * FROM course WHERE cname LIKE @name;  
    
  2. 输出参数:使用OUTPUT关键字,返回处理结果。
    CREATE PROCEDURE proc_avergrade @sno VARCHAR(10), @savg FLOAT OUTPUT  
    AS  
    SELECT @savg = AVG(grade) FROM sc WHERE sno = @sno;  
    
    • 调用
      DECLARE @avg FLOAT  
      EXEC proc_avergrade '201215121', @avg OUTPUT  
      PRINT '平均成绩:' + CONVERT(VARCHAR, @avg);  
      

(四)存储过程管理

  1. 查看存储过程
    • sp_help 存储过程名:查看参数信息。
    • sp_helptext 存储过程名:查看源代码(若未加密)。
  2. 加密存储过程
    CREATE PROCEDURE add_two2 @p1 INT, @p2 INT WITH ENCRYPTION  
    AS ...  -- 加密后无法通过sp_helptext查看源码  
    
  3. 删除存储过程
    DROP PROCEDURE 存储过程名;  
    

三、ODBC(开放数据库连接)

(一)核心作用

  • 提供统一接口,允许应用程序通过SQL访问不同DBMS(如Oracle、SQL Server),解决异构数据库共享问题。

(二)体系结构

  1. 四层结构
    • 用户应用程序:调用ODBC接口。
    • ODBC驱动程序管理器:管理驱动程序加载。
    • 数据库驱动程序:与具体数据库交互。
    • 数据源:具体数据库实例。

四、JDBC(Java数据库连接)

(一)基本概念

  • Java语言的数据库访问API,由Java类和接口组成,支持执行SQL语句,开发纯Java数据库应用。

五、核心考点总结

  1. 存储过程创建与调用:重点掌握参数定义(输入/输出)、默认值设置、加密选项。
  2. 存储过程应用场景:复杂业务逻辑封装、性能优化(减少网络传输)、权限控制。
  3. ODBC与JDBC对比:均为数据库连接标准,ODBC跨语言,JDBC专用于Java。

复习建议:通过实例练习存储过程编写,注意参数传递方式和输出参数的使用,理解ODBC/JDBC在异构数据库访问中的作用。

第九章 数据库恢复技术期末复习总结

一、事务的基本概念

(一)事务的定义

  • 定义:用户定义的一组数据库操作序列,这些操作要么全做,要么全不做,是数据库的基本执行单元。
  • 示例:银行转账事务包含从账户A扣款和向账户B存款,两者必须同时成功或失败。

(二)事务的ACID特性(核心考点)

特性含义示例
原子性事务中的操作要么全做,要么全不做转账时扣款和存款必须同时完成,否则回滚
一致性事务执行后数据库从一个一致状态变为另一个一致状态转账前后A+B的总金额不变
隔离性并发执行的事务互不干扰,一个事务的执行不被其他事务影响多个用户同时转账时,彼此数据互不干扰
持久性事务提交后,其对数据库的修改永久有效,不受故障影响转账成功后,即使系统崩溃,数据也不会丢失

二、数据库故障类型及影响

(一)故障分类与特点

故障类型原因影响范围破坏的特性
事务内部故障运算溢出、死锁、完整性违反等仅当前事务原子性、一致性
系统故障(软故障)CPU故障、操作系统错误、断电等所有正在运行的事务原子性、一致性、持久性
介质故障(硬故障)磁盘损坏、磁头碰撞等数据库物理损坏所有数据及事务
计算机病毒恶意程序攻击数据库或事务一致性、持久性

(二)典型场景

  • 事务内部故障:转账时账户余额不足,事务回滚。
  • 系统故障:服务器断电,未提交事务丢失,已提交事务可能未写入磁盘。
  • 介质故障:硬盘损坏导致数据库文件丢失,需重装后备副本。

三、数据库恢复技术核心手段

(一)建立冗余数据

  1. 数据转储(Backup)

    • 定义:将数据库复制到后备存储介质,形成后备副本。
    • 分类
      • 静态转储:转储期间禁止事务,数据一致但影响可用性。
      • 动态转储:转储期间允许事务,需结合日志文件保证一致性。
      • 海量转储:转储全部数据库,恢复方便但耗时。
      • 增量转储:只转储更新数据,节省时间空间。
    • 策略:定期进行海量转储(如每月),每日增量转储,结合日志文件。
  2. 日志文件(Log File)

    • 作用:记录事务对数据库的更新操作,用于故障恢复。
    • 格式:以记录为单位,包含事务标识、操作类型、对象、旧值和新值。
    • 原则先写日志,后写数据库,确保故障时可恢复。

(二)故障恢复步骤(重点)

1. 事务故障恢复(事务未正常结束)
  • 步骤
    1. 反向扫描日志,查找该事务的更新操作。
    2. 对每个更新操作执行逆操作(如插入→删除,修改→还原旧值)。
    3. 直至找到事务开始标记,完成回滚。
2. 系统故障恢复(系统重启)
  • 步骤
    1. 正向扫描日志,区分事务状态:
      • 重做队列(Redo):已提交但未写入磁盘的事务。
      • 撤销队列(Undo):未完成的事务。
    2. 对撤销队列中的事务反向扫描日志,执行逆操作。
    3. 对重做队列中的事务正向扫描日志,重新执行操作。
3. 介质故障恢复(数据库物理损坏)
  • 步骤
    1. 装入最新后备副本(静态转储+日志,或动态转储+完整日志)。
    2. 装入转储时刻后的日志文件,重做已提交事务。
  • 注意:需DBA介入,执行重装和恢复命令。

四、日志文件与恢复策略

(一)日志文件的关键作用

  • 事务故障恢复:通过日志回滚未完成事务。
  • 系统故障恢复:区分Redo和Undo队列。
  • 介质故障恢复:结合后备副本重做已提交事务。

(二)转储与日志结合策略

转储方式日志需求恢复效率
静态海量转储仅需转储时刻日志恢复快,需全量数据
动态增量转储完整记录转储期间所有事务日志恢复需结合日志重做/撤销

五、提高数据库可用性的方案

(一)数据库镜像(Database Mirroring)

  • 定义:自动将数据库复制到镜像磁盘,主库更新时同步镜像。
  • 优点
    • 介质故障时可直接使用镜像磁盘,无需重装。
    • 支持并发读操作,提高可用性。
  • 缺点:频繁复制影响性能,通常仅镜像关键数据。

六、核心考点总结

  1. 事务ACID特性:理解各特性的定义及保证机制。
  2. 故障分类:区分事务内部、系统、介质故障的原因和恢复方式。
  3. 恢复技术
    • 数据转储的类型及适用场景。
    • 日志文件的格式和“先写日志”原则。
    • 不同故障的恢复步骤(Redo/Undo的区分与执行)。
  4. 数据库镜像:作为介质故障的预防措施,提高恢复效率。

复习建议:结合具体案例(如转账事务故障、系统断电、磁盘损坏)理解恢复步骤,重点掌握日志文件在恢复中的核心作用。

第10章 并发控制期末复习总结

一、并发事务执行的问题

(一)三大典型问题

问题类型定义示例场景
丢失修改两个事务读入同一数据并修改,后提交的事务覆盖先提交的修改T1和T2同时读取A=10,T1改A=9,T2改A=8,最终A=8,T1修改丢失
不可重复读事务T1读取数据后,T2更新数据,导致T1再次读取结果不一致T1读取B=100求和,T2将B改为200,T1重读求和结果变化
读脏数据事务T1修改数据并写入,T2读取后T1回滚,T2读到的数据与数据库不一致T1改C=200,T2读取C=200,T1回滚C=100,T2读到脏数据200

(二)问题根源

并发操作破坏了事务的隔离性,需通过并发控制确保事务间互不干扰。

二、封锁机制(核心解决方案)

(一)基本封锁类型

  1. 排它锁(X锁/写锁)

    • 作用:事务T对数据A加X锁后,可读写A,其他事务不能加任何锁,直至T释放。
    • 场景:修改数据前必须加X锁,防止其他事务干扰。
  2. 共享锁(S锁/读锁)

    • 作用:事务T对数据A加S锁后,可读A但不能写,其他事务可加S锁但不能加X锁。
    • 场景:读取数据时加S锁,允许多个事务同时读,但禁止写。

(二)锁的相容矩阵

已有锁\请求锁X锁S锁
X锁不相容不相容
S锁不相容相容

三、三级封锁协议(重点考点)

协议级别加锁规则解决的问题
一级事务修改数据前加X锁,直至事务结束释放丢失修改
二级在一级基础上,读取数据前加S锁,读完释放读脏数据
三级在一级基础上,读取数据前加S锁,直至事务结束释放不可重复读(包括幻影现象)

示例

  • 二级协议解决读脏数据:T1修改C时加X锁,T2读C时需等T1释放锁,避免读到T1未提交的修改。

四、活锁与死锁

(一)活锁

  • 现象:事务因锁请求顺序不当,长期等待无法获得锁(如T2等待T1释放锁,系统优先批准后续T3、T4的请求,T2永远等待)。
  • 解决:采用先来先服务(FCFS) 策略,按请求顺序排队。

(二)死锁

  1. 形成条件:事务T1和T2互相等待对方持有的锁(如T1持R1锁等R2,T2持R2锁等R1)。
  2. 预防方法
    • 一次封锁法:事务一次申请所有需用的锁,否则不执行(缺点:降低并发度,难预知所有锁)。
    • 顺序封锁法:规定数据对象封锁顺序,所有事务按序加锁(缺点:维护成本高,难适应动态变化)。
  3. 诊断与解除
    • 超时法:等待超过时限则判死锁(可能误判)。
    • 等待图法:通过有向图检测回路,发现死锁后撤销代价最小的事务。

五、并发调度的可串行性

(一)可串行化调度

  • 定义:并发调度结果与某一串行调度结果相同,即为正确调度。
  • 示例:事务T1和T2并发执行结果与T1→T2或T2→T1串行执行结果一致。

(二)两段锁协议(2PL)

  1. 核心规则
    • 扩展阶段:事务可申请锁,但不能释放锁。
    • 收缩阶段:事务可释放锁,但不能申请锁。
  2. 作用:确保并发调度的可串行性,是可串行化的充分条件(但非必要条件)。
  3. 注意:遵守2PL的事务可能发生死锁(如T1和T2互相等待锁)。

六、核心考点总结

  1. 并发问题与协议对应
    • 丢失修改→一级封锁协议;
    • 读脏数据→二级封锁协议;
    • 不可重复读→三级封锁协议。
  2. 死锁处理:预防(一次封锁/顺序封锁) vs 诊断(等待图法) vs 解除(撤销事务)。
  3. 两段锁阶段:扩展阶段申请锁,收缩阶段释放锁,确保调度可串行化。

复习建议:结合具体场景理解各协议的加锁规则,通过案例分析活锁与死锁的形成与解决,重点掌握三级协议的区别和两段锁协议的阶段划分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值