当前位置: 首页 > news >正文

数据库期末复习

数据库的基本概念

数据data:数据库存储的基本对象

数据库database:DB,有组织的、可共享的大量数据的集合

数据库管理系统DBMS:用户和操作系统之间的一层数据管理软件

数据库系统DBS:由数据库、数据库管理系统、应用程序和数据库管理员(DBA)组成

数据库系统的特点

数据结构化

数据共享性高,冗余度低且容易扩充

数据独立性高(物理、逻辑)

数据由数据库管理系统统一管理和控制

五种基本运算

并:U

差:- 或 \

选择:\sigma_条件(关系名)

投影:\pi_属性列表(关系名) 自动去重

笛卡尔积:x,两两组合,生成一个大表

数据模型

概念模型、逻辑模型(物理模型)

概念模型:E-R图

逻辑模型:网状、层次、关系模型

物理模型:对数据最底层的抽象

E-R图:实体entity、属性attribute、联系relationship

数据模型的组成要素:数据结构、数据操作、数据的完整性约束条件

数据模型 = 数据的结构 + 数据的操作 + 数据的约束

三级模式结构:外模式、逻辑模式、内模式

外模式:子模式/用户模式:用户能看见和使用的局部数据的逻辑结构和特征的描述,视图

模式:逻辑模式:所有用户的公共数据视图

内模式:存储模式:数据物理结构和存储仿射的描述,数据库内部的组织方式

主键、候选键

主键:唯一的、不能为NULL、可以从候选键选一个作为主键

外键:不是表R的主键,但是是表S的主键

超键:能唯一标识元组的属性集合

候选键:能够确定唯一元组的属性组合(超键中挑出唯一最小集合)

主属性:包含在任何一个候选键上的属性

非主属性:不包含在任何一个候选键中的属性

参照完整性

如果一个表中的某个字段是另一个表主键的外键,则该字段的指必须存在于被参照表的主键中,或者为NULL

函数依赖

各个属性之间的一种依赖关系

属性和属性之间一对一的推导关系称为函数依赖

平凡函数依赖

X = {学号, 姓名}

Y是X的子集时(或相等),称为平凡依赖

X → {学号}

非平凡依赖

Y不是X的子集

X → {成绩}

完全依赖函数

第二范式的要求,完全依赖候选键推出数据

部分函数依赖

传递函数依赖

X->Y

Y->Z

Z传递依赖于X

第三范式要求,可以拆表来满足要求

多值依赖

一个属性决定另一个属性的多个值,且这些值彼此之间互不依赖。

范式

数据库设计的基本原则称为范式

第一范式(1NF)

保证数据表中的每一个字段的值具有原子性(不可再拆分的最小数据单元)

即每个元组的所有属性只能有一个值

第二范式(2NF)

第一范式的基础上增加每一条数据都是可唯 一表示的,所有非主键字段都必须完全依赖主键,不能只依赖主键的一部分

第三范式(3NF)

每一个非主键字段都和主键字段直接相关

所有非主属性之间不能有依赖关系,相互独立

范式的优缺点

优点:有助于消化数据库中的数据冗余

        扩展性和数据完整性达到最好的平衡

缺点:降低查询效率,范式越高,设计的表越多

BCNF(巴斯范式)

每个非平凡依赖的函数依赖X->Y,X必须是超键

范式的区分

1NF每行每列都只有一个值

2NF完全依赖主键

3NF非主属性之间不能有依赖

ACID4个特性

A:atomicity 原子性 

事务中的所有操作要么全部完成,要么全部不做,不能只完成一部分

C:consistency 一致性 

事务执行前后,数据库必须保持完整性约束,数据处于合法状态

I:isolation 隔离性

多个事务并发执行时,互不干扰,事务的中间状态对其他事务不可见

D:durability 持久性

事务一旦提交,其结构永久保存在数据库中,及时系统崩溃也不会丢失

假设银行转账:

        从账户 A 扣钱,同时给账户 B 加钱。

        原子性:要么两步都成功,要么都不做。

        一致性:转账后账户总金额不变。

        隔离性:多个转账不会互相影响。

        持久性:转账成功后,数据永久保存。

冲突

两个事务并发访问数据库的同一数据项,并且至少有一个事务对数据进行了写操作

丢失(更新)

两个事务同时读取同一个数据,然后都修改后写回数据库,其中一个事务的修改被另一个覆盖,导致前一次的更新丢失

(脏)修改

一个事务修改了数据,但是还没提交,另一个事务读取并修改了这部分未提交的数据,导致不一样

两次读不一致(不可重复读)

一个事务内两次读取同一条数据,中间另一个事务修改了这条数据并提交,导致两次读取结果不同

域完整性

数据库中每个属性(字段)必须符合该属性定义的取值范围和格式规则

数据库设计的步骤

需求分析

概念结构设计:E-R图设计

逻辑结构设计:转换E-R图为与DBMS相符的逻辑结构

物理结构设计:设计存取方法、设计关系、索引等物理结构

数据库实施:建立数据库,试运行,装数据

数据库运行和维护

连接

内连接

只保留AB表中匹配成功的行

SELECT * FROM A INNER JOIN B ON A.id = B.id;

自然连接

AB表中相同名字的属性自动进行等值连接

等值连接

内连接的一种,明确指定连接条件为=

SELECT * FROM A, B WHERE A.id = B.id;

外连接

左外连接

返回左表的所有记录,右边没有匹配的显示为NULL

SELECT * FROM A LEFT JOIN B ON A.id = B.id;

右外连接

SELECT * FROM A RIGHT JOIN B ON A.id = B.id;

全外连接

SELECT * FROM A FULL OUTER JOIN B ON A.id = B.id;

sql语句

DDL:定义:create drop alter

DML:操作:select insert update delete

创建数据库

create database 库;

drop database 库;

show database ;

delete from 表 where 条件;

select * from 表 where 条件;


UPDATE Student 
SET Sname = '张三' 
WHERE Class = '计算机一班';

% 表示匹配任意长度的任意字符(零个或多个字符)

_ 表示匹配任意单个字符(一个字符)


CREATE TABLE Student (
  Sno CHAR(6) PRIMARY KEY,                 -- 学号,主键,固定6位字符
  Sname VARCHAR(50) NOT NULL,              -- 姓名,变长字符串,不允许为空
  Gender CHAR(1) CHECK (Gender IN ('M','F')),  -- 性别,限定只能是 'M' 或 'F'
  Age INT CHECK (Age >= 0 AND Age <= 150), -- 年龄,整数,限制范围0~150
  Email VARCHAR(100) UNIQUE,                -- 邮箱,唯一约束
  EnrollmentDate DATE DEFAULT CURRENT_DATE, -- 入学日期,默认当前日期
  Phone VARCHAR(20) DEFAULT NULL,           -- 电话,允许为空,默认NULL
  ClassNo CHAR(4) NOT NULL,                  -- 班级编号,非空
  CONSTRAINT FK_Class FOREIGN KEY (ClassNo) REFERENCES Class(ClassNo) -- 外键,关联班级表
);
 

INSERT INTO Student (Sno, Sname, Age)

VALUES

('1001', '张三', 18),
('1002', '李四', 19),
('1003', '王五', 17);

ALTER TABLE 表名 ADD 列名 数据类型[约束条件];

GRANT(授权)

GRANT 权限列表 ON 对象 TO 用户或角色;
GRANT SELECT, INSERT ON Employees TO user1;

REVOKE(撤销授权)

REVOKE 权限列表 ON 对象 FROM 用户或角色;
REVOKE INSERT ON Employees FROM user1;
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/255420.html

相关文章:

  • AI是如何思考的,它的过程又是怎样
  • Python中布尔值在函数中的巧妙运用
  • 离线环境jenkins构建前端部署镜像
  • 数据库part2---子查询
  • GO Gin Web框架面试题及参考答案
  • SIMPL论文阅读
  • Deepseek+墨刀,1min快速生成流程图!
  • RPG34.AI攻击
  • 音视频之H.264的可伸缩编码SVC
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年6月20日第114弹
  • el-tree的属性render-content自定义样式不生效
  • linux——C程序的编译与调试
  • Kotlin 中ArrayList、listOf、arrayListOf 和 mutableListOf区别
  • 学习路之uniapp--uniapp扩展uni-ui
  • 常用绘图工具网站推荐合集:打造高效可视化表达力!
  • 亚马逊云科技中国峰会
  • 如何在服务器终端下载百度网盘数据
  • 搭建pikachu靶场
  • 礼让行人:深圳 vs 上海
  • tkinter 的 pack() 布局管理器学习指南
  • AI 时代,数仓建模还有价值吗?
  • 第32周———Tensorflow|LSTM-火灾温度预测
  • 【unity游戏开发——热更新】什么是Unity热更新
  • AI觉醒:从实验室幻影到社会氧气——一部穿透60年的智能进化史诗
  • Vue 比较两个数组对象,页面展示差异数据值
  • 算法-每日一题(DAY10)打家劫舍
  • 关于Seata的一个小issue...
  • 基于大模型的三叉神经痛预测及治疗方案研究报告
  • windows中通过git从远程快速只下载指定一个文件的批处理命令
  • Agent轻松通-P3:分析我们的Agent