数据库系统概论学习笔记

【题型一】填空/选择

第一章 绪论

四个基本概念

  1. 数据:数据是描述事物的++符号记录++ (数据库中存储的++基本对象++)。
  2. 数据库:++长期储存在计算机内的、有组织的、可共享++ 的大量++数据++的集合。
  3. 数据库管理系统:位于++用户++ 与++操作系统++ 之间的一层数据管理++软件++。
  4. 数据库系统:引入数据库后的++计算机系统++ ,一般由++数据库、++ ++数据库管理系统++ ++(及其应用开发工具)、应用系统和数据库管理员++ 组成的++存储、管理、处理和维护数据++的系统。

数据库管理系统的主要功能

  1. 数据++定义++功能DDL
  2. 数据++组织、存储和管理++
  3. 数据++操纵++功能DML
  4. 数据库++事务管理和运行管理++功能
  5. 数据库++建立和维护++功能
  6. 其他功能(如通信、数据转换、互访/互操作)

数据库系统的特点

  1. 整体数据结构化(主要,是++文件系统阶段++ 和++数据库系统阶段++的本质区别)
  2. 数据的共享性强
  3. 数据的独立性强(++物理独立性++ 和++逻辑独立++ 性,++两级映像++功能来保证)
  4. 数据由DBMS统一管理和控制

数据模型

  1. 数据模型是对++现实世界数据特征++的抽象,是对现实世界的模拟,是数据库系统的核心和基础。
    1. 现实世界 ->信息世界 (概念模型,最常用E-R模型)->机器世界(数据模型,从逻辑模型到物理模型的转换由DBMS完成)
    2. 数据模型的三要素
      1. 数据结构(最重要,静态)
      2. 数据操纵(动态)
      3. 完整性约束(实体完整性、参照完整性和用户定义的完整性)

数据库系统的结构

  1. 模式:是数据库中全体数据的++逻辑结构和特征++的描述,是所有用户的公共数据视图。
  2. 模式反映数据的结构和联系,实例反映数据库某一时刻的状态。
  3. 外模式/子模式/用户模式:数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述,数据库用户的数据视图。
  4. 内模式/存储模式:数据物理结构和存储方式的描述,是数据在数据库内部的组织方式。
  5. 数据库的三级模式和二级映像功能
    1. 三级模式:外模式->模式->内模式
    2. 二级映像:外模式/模式映像(保证++逻辑独立性++ )、模式/内模式映像(保证++物理独立性++)

由内到外:硬件(数据库)->操作系统->数据库管理系统->应用开发工具->应用程序

第二章 关系数据库

  1. 关系模型 = 关系数据结构(只有关系)+ 关系操作集合 + 完整性约束
  2. 关于码(key)
    1. 能唯一标识就是候选码
    2. 一个关系至少有一个候选码
    3. 如果所有属性都是候选码就叫全码
  3. 关系的三种类型:1️⃣基本关系;2️⃣查询表;3️⃣视图
  4. 关系操作中,操作的对象和结果都是关系。关系操作包括++查询、插入、删除、修改++等。
  5. 基本关系的性质:行或列之间均可任意交换,不同列属性可以相同,列是同质的,行的候选码必须互异,分量不可再分
  6. 关系的完整性
    1. 实体完整性:主码++不可空++
    2. 参照完整性:外码要么为空,要么等于被参照关系的主码

第三章 关系数据库标准语言SQL

SQL概述

  1. ++结构化++查询语言,是关系数据库标准语言
  2. 支持++数据查询(DQL)、数据定义(DDL)、数据操纵(DML)、数据控制(DCL)++等功能
  3. 特点:1️⃣++功能综合++ 风格统一;2️⃣数据操纵高度++非过程化++ ;3️⃣++面向集合++ 的操作方式;4️⃣++语法结构统一++、使用方式多样;5️⃣语言简洁、易学易用

索引

索引是一种++提高数据检索速度++ 的数据结构,属于++内模式++。

视图

视图是RDBMS提供给用户以++多种角度观察数据库数据++的重要机制。

视图作用:1️⃣保护机密数据;2️⃣为重构数据库提供一定逻辑独立性;3️⃣简化操作;4️⃣多角度

第四章 数据库安全性

  1. 安全性问题包括++数据泄露、更改或破坏++ ,更多的是++技术安全类++问题。
  2. 不安全因素及对应措施
    1. 非授权用户的恶意存取和破坏(身份鉴别、存取控制、视图等)
    2. 重要或敏感数据被泄漏(强制存取控制、数据加密存储、加密传输等)
    3. 安全环境的脆弱性(提升安全标准)
  3. 安全性控制
    1. 用户身份鉴别:最外层,++用户标识=用户名+标识号++
    2. 存取控制:定义用户权限(包括数据对象和操作类型),合法权限检查
      1. 自主存取控制(DAC)C2级------授权/撤销(授权的数据对象的范围越小,授权子系统就越灵活)
      2. 强制存取控制(MAC)B1级------"上读下写,同级可读可写"
    3. 视图机制
    4. 审计(C2以上必须有)
      1. 功能:1️⃣提供多种审计++查阅++ 方式(基本);2️⃣提供审计++分析和报表++ 功能;3️⃣审计++日志管理++ 功能(先存后删,只能看不能改);4️⃣提供审计设计及审计记录信息的++专门视图++
    5. 数据加密:明文->密文
    6. 其他安全性保护:推理控制、隐蔽信道、数据隐私
  4. 在对用户授予列INSERT权限时,一定要包含对++主码++ 的INSERT权限,否则用户的插入会因为空值而被拒绝。除了授权的列,其他列的值或者取++空值++ ,或者为++默认值++。

第五章 数据库完整性

数据库完整性包括++正确性、相容性++,分别对应实体完整性、参照完整性;另外还有用户定义的完整性

涉及到参照关系如果有限制,系统可以采取的策略包括++拒绝执行、级联删除、设为空值++。

UNIQUE只是要求互异,可以为空;是某个关系的外码也可以为空。

创建表时用户定义完整性,如果某一个数据类型后没有逗号分隔的CHECK语句,那么是对属性的约束条件;如果CHECK是单独分开的,那么定义了元组上的约束条件。两种语言都是合法的,而且基本上约束效果是一样的,但是要具体问题具体分析。

后续用ALTER加约束只能加基于元组的约束了,也能加主码约束。自己定义的话一般是++NOT NULL、UNIQUE、CHECK++等字句。

【题型二】SQL

数据定义

  1. 模式
复制代码
CREATE SCHEMA <模式名> AUTHORIZATION <用户名>;  //创建模式
DROP SCHEMA <模式名> <CASCADE|RESTRICT>;  //删除模式,要修改只能先删后建
复制代码
CREATE TABLE ["模式名"] <表名> (<列名> <数据类型> [约束条件]);  //创建表
ALTER TABLE <表名> ADD <列名><数据类型>;  //添加一列
ALTER TABLE <表名> DROP <列名>;  //删除一列
ALTER TABLE <表名> ALTER <列名> TYPE <数据类型>;  //修改列名
DROP TABLE <表名> [RESTRICT|CASCADE];  //删除表(限制/级联)
    1. 视图
复制代码
CREATE VIEW <视图名> (<列名>) AS <子查询> WITH CHECK OPTION;  //创建视图
DROP VIEW <视图名> CASCADE;  //级联删除
    1. 索引
复制代码
CREATE UNIQUE INDEX <索引名> ON <表名> (<列名> [次序]); //创建唯一索引
CREATE CLUSTER INDEX <索引名> ON <表名> (<列明> [次序]); //创建聚簇索引
ALTER INDEX <旧索引名> RENAME TO <新索引名>;  //修改索引名
DROP INDEX <索引名>;  //删除索引

数据查询

  1. 单表查询
复制代码
SELECT [ALL|DISTINCT] <目标列表达式> [别名]
FROM <表名或视图名>
WHERE <条件表达式>  //[NOT]LIKE, %, _, [NOT] BETWEEN...AND...
                  //IS [NOT] NULL, [NOT] IN(...), ESCAPE<换码字符>
GROUP BY <列名1> HAVING <条件表达式>
ORDER BY <列名2> [ASC|DESC]  //ASC升序,DESC降序
LIMIT <行数1> OFFSET <行数2>;  //LIMIT限制输出行数,OFFSET先省略行数

聚集函数COUNT, SUM, AVG, MIN, MAX只能用于SELECT(++如果在SELECT中用,要放到第一个++)和HAVING子句,作用于组;不可以用在WHERE子句,因为WHERE作用于表。如果有GROUP BY一定出现至少一种聚集函数。聚集函数后面可以跟[ALL|DISTINCT],仅处理非空值(除count(*)),默认为ALL。

    1. 连接查询
复制代码
SELECT * FROM T1,T2 WHERE T1.Tno=T2.Tno;  //自然连接查询,自动去重复列
SELECT * FROM T T1,T T2 WHERE T1.Tpno=T2.Tno;  //自身连接查询,使用别名
SELECT * FROM T1 
    LEFT OUTER JOIN T2 ON (T1.Tno=T2.Tno)  //左外连接查询,左边不为空
SELECT * FROM T1 
    RIGHT OUTER JOIN T2 ON (T2.Tno=T1.Tno)  //右外连接查询,右边不为空
    1. 嵌套查询
复制代码
SELECT *
FROM T1
WHERE Tno IN     //这里可以用[NOT]IN,比较运算符,还可以用ALL和ANY来比较
                 //这里WHERE后面也可以直接跟[NOT]EXSISTS判断
           (SELECT Tno
            FROM T2
            WHERE Tpno='81003');  //不相关子查询
            
//判断子查询是否相关:看子查询中是否用到外层的变量做计算或比较
    1. 集合查询

UNION并集,INTERSECT交集,EXCEPT差集。要想集合查询必须列的数量和数据类型保证一致。

    1. 基于派生表的查询
复制代码
SELECT *
FROM T1,(SELECT * FROM T2 WHERE Tno='81001') AS T3  //派生表的AS可省略
WHERE T1.Tno=T3.Tpno;

数据更新

  1. 插入数据
复制代码
INSERT INTO <表名> [(<属性列>)] VALUES <常量>;

会检查是否破坏表上已定义的完整性规则。

    1. 修改数据
复制代码
UPDATE <表名> SET <列名>=<表达式> [WHERE <条件>];  //没有WHERE就所有都改
    1. 删除数据
复制代码
DELETE FROM <表名> [WHERE<条件>]  //没有WHERE就全删,仅删内容不删定义

【题型三】关系代数

  1. 关系代数:是一种抽象的查询语言,它用对关系的运算来表达查询。
  2. 运算三大要素:1️⃣运算对象;2️⃣运算符;3️⃣运算结果。运算对象和运算结果均为关系,运算符包括集合运算符和专门的关系运算符。
  3. 除了传统的集合运算,还有一些专门的关系运算:
    1. 选择[\sigma_{F}(R) = \{ t|t \in R \wedge F(t)='TRUE'\}](#\sigma_{F}(R) = { t|t \in R \wedge F(t)='TRUE'})就是针对元组判断条件F真假,选出真元组
    2. 投影[\pi_{A}(R)=\{ t[A] | t \in R\}](#\pi_{A}(R)={ t[A] | t \in R})就是选出A属性组的所有列组成新的关系
    3. 连接 就是合并表,之前写到过的自然连接和等值连接,得到合并起来的关系/表
    4. 除[R(X,Y), S(Y,Z),R \div S=\{ t_r[X]|t_r\in R \wedge \pi_Y(S)\subseteq Y_x\}](#R(X,Y), S(Y,Z),R \div S={ t_r[X]|t_r\in R \wedge \pi_Y(S)\subseteq Y_x}),先选出相同列组Y,然后把S中Y的取值当成定义域在R找对应元组,去掉Y包含的列输出R剩余的列中满足Y条件的元组组成的表。
相关推荐
Gauss松鼠会2 分钟前
GaussDB事务和并发控制机制
java·数据库·sql·华为云·gaussdb
似水流年风萧兮36 分钟前
MySql按年月日自动创建分区存储过程
数据库·mysql·oracle
java1234_小锋43 分钟前
Redis是单线程还是多线程?
java·数据库·redis
臣妾写不来啊1 小时前
MySQL之having关键字
数据库·mysql
Ruyi_baobao2 小时前
MySQL -- 约束
数据库·mysql·oracle
L~river2 小时前
SQL刷题快速入门(二)
数据库·sql·mysql·算法·笔试·刷题
Faxxtty3 小时前
【MySQL】SQL菜鸟教程(一)
sql·mysql·oracle
shuangyueliao3 小时前
sql server cdc漏扫数据
数据库·oracle
Lang_xi_3 小时前
mysql中创建计算字段
数据库·mysql