面试八股文--数据库基础知识总结(1)
1、数据库的定义
- 数据库(DataBase,DB)简单来说就是数据的集合
- 数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。
- 数据库系统(Database System,DBS)是指基于数据库的计算机应用系统,通常由数据库、数据库管理系统、软件、数据库管理员、用户组成
2、数据库中的一些基本概念
- 元组:元组(tuple)是关系数据库中的基本概念,关系是一张表,表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。 在二维表里,元组也称为行。
- 码:码就是能唯一标识实体的属性,对应表中的列。
- 候选码:若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。
- 主码 : 主码也叫主键。主码是从候选码中选出来的。 一个实体集中只能有一个主码,但可以有多个候选码。
- 外码 : 外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。外键用来和其他表建立联系用,外键是另一表的主键,外键是可以有重复的,可以是空值。一个表可以有多个外键。
- 主属性:候选码中出现过的属性称为主属性。比如关系 工人(工号,身份证号,姓名,性别,部门). 显然工号和身份证号都能够唯一标示这个关系,所以都是候选码。工号、身份证号这两个属性就是主属性。如果主码是一个属性组,那么属性组中的属性都是主属性。
- 非主属性: 不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生(学号,姓名,年龄,性别,班级)中,主码是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性。

3、数据库中三范式
- 第一范式(1NF):属性不可再分
- 第二范式(2NF):在1NF的基础上,消除了非主属性对码的部分函数依赖
- 第三范式(3NF):在2NF的基础上,消除了非主属性对码的传递函数依赖
(1) 函数依赖(Functional Dependency)
函数依赖是关系数据库中属性之间的一种约束关系。假设有一个关系模式R(U) ,其中U是属性集合,如果对于U 的一个子集X 和另一个子集Y,满足以下条件:对于R的任意两个元组t和s,只要 t[X] = s[X],就必然有t[Y] = s[Y],那么称Y函数依赖于X,记作。
- 举例:在学生关系表中,假设属性集合为 {学号, 姓名, 年龄, 性别},如果每个学号唯一对应一个学生的所有信息,那么可以表示为学号 -> 姓名, 年龄, 性别。
(2)部分函数依赖(Partial Functional Dependency)
如果在关系模式R(U) 中,存在函数依赖,并且存在X的一个真子集X' ,使得
成立,那么称Y对X是部分函数依赖。
- 举例:假设有一个关系模式R(学号, 课程号, 成绩),其中 (学号, 课程号)是候选键。如果(学号, 课程号) -> 成绩,但同时课程号->成绩也成立,那么成绩 对 (学号, 课程号) 是部分函数依赖。
部分函数依赖会导致数据冗余和更新异常,因此在数据库设计中应尽量避免。
(3) 完全函数依赖(Full Functional Dependency)
如果在关系模式R(U)中,存在函数依赖,并且对于X的任意真子集X',
都不成立,那么称Y对X是完全函数依赖。
- 举例:在关系模式R(学号, 姓名, 年龄)中,假设学号->姓名, 年龄。因为姓名和年龄不能被学号的任何真子集决定,所以姓名和年龄对学号是完全函数依赖。
完全函数依赖是数据库设计中期望的依赖关系,因为它可以减少数据冗余和更新异常。
(4) 传递函数依赖(Transitive Functional Dependency)
在关系模式R(U)中,如果存在函数依赖和
,并且Y不是X 的子集,同时X 不能直接决定Z,那么称Z对X是传递函数依赖。
- 举例:假设有一个关系模式R(学号, 班级, 班主任),其中学号->班级和班级 \rightarrow 班主任,但学号不能直接决定班主任,那么班主任对学号是传递函数依赖。
传递函数依赖也会导致数据冗余和更新异常,因此在数据库设计中,通常需要通过规范化(如第三范式)来消除传递函数依赖。
4、数据库语言
1. 数据库定义语言(DDL,Data Definition Language)
数据库定义语言用于定义和管理数据库的结构,包括创建、修改、删除数据库中的各种对象(如表、视图、索引、约束等)。DDL操作直接影响数据库的模式(schema)。
常见的DDL语句:
1. CREATE(创建)- 创建数据库:CREATE DATABASE database_name;- 创建表:CREATE TABLE table_name (column1 datatype, column2 datatype, ...);- 创建索引:CREATE INDEX index_name ON table_name (column);- 创建视图:CREATE VIEW view_name AS SELECT columns FROM table_name WHERE condition;2. ALTER(修改)- 修改表结构,例如添加或删除列:ALTER TABLE table_name ADD COLUMN column_name datatype;ALTER TABLE table_name DROP COLUMN column_name;- 修改列的数据类型:ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;3. DROP(删除)- 删除数据库:DROP DATABASE database_name;- 删除表:DROP TABLE table_name;- 删除索引:DROP INDEX index_name;- 删除视图:DROP VIEW view_name;4. TRUNCATE(清空)- 清空表中的所有数据,但保留表结构:TRUNCATE TABLE table_name;
特点:
- DDL操作通常会导致数据库结构的永久性变化。
- DDL语句在执行时通常会隐式提交事务,不可回滚。
2. 数据库操作语言(DML,Data Manipulation Language)
数据库操作语言用于操作数据库中的数据,包括插入、更新、删除数据。DML操作直接影响数据库中的数据实例,但不改变数据库的结构。常见的DML语句:
1. INSERT(插入)- 向表中插入数据:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);2. UPDATE(更新)- 修改表中的数据:UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;3. DELETE(删除)- 删除表中的数据:DELETE FROM table_name WHERE condition;4. MERGE(合并)- 在某些数据库系统中,`MERGE`语句用于根据条件插入或更新数据:MERGE INTO target_table tUSING source_table sON (t.id = s.id)WHEN MATCHED THENUPDATE SET t.column = s.columnWHEN NOT MATCHED THENINSERT (column1, column2)VALUES (s.column1, s.column2);
特点:
- DML操作可以被事务控制(如提交或回滚)。
- DML是数据库中最常用的语言,用于日常的数据操作。
3. 数据库查询语言(DQL,Data Query Language)
数据库查询语言是DML的一个子集,专门用于从数据库中检索数据。DQL的核心是`SELECT`语句,它是数据库中最常用的操作之一。
常见的DQL语句:
1. SELECT(查询)- 基本查询:SELECT column1, column2, ...FROM table_nameWHERE condition;- 查询所有列:SELECT * FROM table_name;- 带条件的查询:SELECT column1, column2FROM table_nameWHERE column1 = value AND column2 > value;- 聚合查询:SELECT COUNT(*), AVG(column), SUM(column), MAX(column), MIN(column)FROM table_nameWHERE conditionGROUP BY column;- 多表连接查询:SELECT t1.column1, t2.column2FROM table1 t1JOIN table2 t2 ON t1.id = t2.idWHERE condition;
特点:
- DQL的核心是`SELECT`语句,用于从数据库中检索数据。
- 查询操作不会修改数据库中的数据,只是返回结果集。
- 查询语言支持复杂的逻辑,如条件过滤、分组、排序、连接等。
到这里我们就介绍完数据库的相关理论知识,从整体上把握了数据库,接下来介绍MySQL
记得给个小心心♥~
相关文章:
面试八股文--数据库基础知识总结(1)
1、数据库的定义 数据库(DataBase,DB)简单来说就是数据的集合数据库管理系统(Database Management System,DBMS)是一种操纵和管理数据库的大型软件,通常用于建立、使用和维护数据库。数据库系统…...
10. docker nginx官方镜像使用方法
本文介绍docker nginx官方镜像使用方法,因为第一次用,在加上对docker也不是很熟,中间踩了一些坑,为了避免下一次用又踩坑,因此记录如下,也希望能够帮到其它小伙伴。 官方镜像页面:https://hub.d…...
[Web 安全] PHP 反序列化漏洞 —— PHP 反序列化漏洞演示案例
关注这个专栏的其他相关笔记:[Web 安全] 反序列化漏洞 - 学习笔记-CSDN博客 PHP 反序列化漏洞产生原因 PHP 反序列化漏洞产生的原因就是因为在反序列化过程中,unserialize() 接收的值可控。 0x01:环境搭建 这里笔者是使用 PhpStudy 搭建的环…...
es-head(es库-谷歌浏览器插件)
1.下载es-head插件压缩包,并解压缩 2.谷歌浏览器添加插件 3.使用...
第二十:【路由的props配置】
作用:让路由组件更方便的收到参数(可以将路由参数作为props传给组件) {name:xiang,path:detail/:id/:title/:content,component:Detail, 第一种方法:// props的对象写法,作用:把对象中的每一组key-valu…...
Vue 2全屏滚动动画实战:结合fullpage-vue与animate.css打造炫酷H5页面
引言 在移动端H5开发中,全屏滚动效果因其沉浸式体验而广受欢迎。如何快速实现带有动态加载动画的全屏滚动页面?本文将手把手教你使用 Vue 2、全屏滚动插件 fullpage-vue 和动画库 animate.css 3.5.1,打造一个高效且视觉冲击力强的H5页面。通…...
AF3 DataPipeline类process_pdb 方法解读
DataPipeline 类中的 process_pdb 方法用于从 PDB 文件中生成特定蛋白质链的特征,作为 AlphaFold3 预测的输入。它的流程与 process_mmcif 类似,但输入来源是 PDB 文件而非 MmcifObject。 源代码: def process_pdb(self,pdb_path: str,alignment_dir: str,is_distillation:…...
抓包工具 wireshark
1.什么是抓包工具 抓包工具是什么?-CSDN博客 2.wireshark的安装 【抓包工具】win 10 / win 11:WireShark 下载、安装、使用_windows抓包工具-CSDN博客 3.wireshark的基础操作 Wireshark零基础使用教程(超详细) - 元宇宙-Meta…...
OpenBMC:BmcWeb app获取socket
OpenBMC:BmcWeb app.run-CSDN博客 app对象在run函数中调用了setupSocket() static std::vector<Acceptor> setupSocket() {std::vector<Acceptor> acceptors;char** names = nullptr;int listenFdCount = sd_listen_fds_with_names(0, &names);BMCWEB_LOG_DE…...
《深度学习实战》第2集-补充:卷积神经网络(CNN)与图像分类 实战代码解析和改进
以下是对《深度学习实战》第2集中 CIFAR-10 数据集 使用卷积神经网络进行图像分类实战 代码的详细分析,并增加数据探索环节,同时对数据探索、模型训练和评估的过程进行具体说明。所有代码都附上了运行结果配图,方便对比。 《深度学习实战》第…...
nodejs:express + js-mdict 作为后端,vue 3 + vite 作为前端,在线查询英汉词典
向 doubao.com/chat/ 提问: node.js js-mdict 作为后端,vue 3 vite 作为前端,编写在线查询英汉词典 后端部分(express js-mdict ) 1. 项目结构 首先,创建一个项目目录,结构如下࿱…...
《深度剖析Linux 系统 Shell 核心用法与原理_666》
1. 管道符的用法 查找当前目录下所有txt文件并统计行数 # 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l 在/etc目录下查找包含"network"的文件并统计数量 # 使用find命令查找文件,并通过grep查找包含特定字符串的文件…...
索提诺比率(Sortino Ratio):更精准的风险调整收益指标(中英双语)
索提诺比率(Sortino Ratio):更精准的风险调整收益指标 📉📊 📌 什么是索提诺比率? 在投资分析中,我们通常使用 夏普比率(Sharpe Ratio) 来衡量风险调整后的…...
minio作为K8S后端存储
docker部署minio mkdir -p /minio/datadocker run -d \-p 9000:9000 \-p 9001:9001 \--name minio \-v /minio/data:/data \-e "MINIO_ROOT_USERjbk" \-e "MINIO_ROOT_PASSWORDjbjbjb123" \quay.io/minio/minio server /data --console-address ":90…...
一周学会Flask3 Python Web开发-Jinja2模板访问对象
锋哥原创的Flask3 Python Web开发 Flask3视频教程: 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 如果渲染模板传的是对象,如果如何来访问呢? 我们看下下面示例: 定义一个Student类 cla…...
RAGS评测后的数据 如何利用influxdb和grafan 进行数据汇总查看
RAGS(通常指相关性、准确性、语法、流畅性)评测后的数据能借助 InfluxDB 存储,再利用 Grafana 进行可视化展示,实现从四个维度查看数据,并详细呈现每个问题对应的这四个指标情况。以下是详细步骤: 1. 环境准备 InfluxDB 安装与配置 依据自身操作系统,从 InfluxDB 官网下…...
第25周JavaSpringboot实战-电商项目 4.商品分类管理
商品分类模块开发笔记 模块功能概述 实现分类数据的 增删改查 功能核心难点: 分类的父子级目录结构递归实现多级分类查找列表展示顺序控制(从父级向子级递归) 接口说明 后台接口 1. 添加分类 请求地址: /admin/category/add 请求方法: …...
C语言--正序、逆序输出为奇数的位。
题目: 采用正序和逆序分别输出为奇数的位。例如输入12345,正序输出135,逆序输出531 代码: #include <stdio.h>void printOddDigits(int num) {int res 0;int divider 10;while (num / divider > 10) {divider * 10;…...
C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载
下载地址<------完整源码 在数字化转型加速的背景下,企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台,其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下,C#开发者需要耗费大…...
H13-821 V3.0 HCIP 华为云服务架构题库
华为云上哪个服务能够用于收集来自主机和云服务的日志数据,并通过海量日志数据的分析与处理帮助开发或运维人员进行问题定位和分析? A:云监控服务 B:云日志服务 C:云审计服务 D:对象存储服务 答案ÿ…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
