MySQL 数据库基础概念

news2024/9/29 15:23:10

一、什么是数据库?

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。

每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。

我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。

所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:

  • 1.数据以表格的形式出现
  • 2.每行为各种记录名称
  • 3.每列为记录名称所对应的数据域
  • 4.许多的行和列组成一张表单
  • 5.若干的表单组成database

二、RDBMS 术语

在我们开始学习MySQL 数据库前,让我们先了解下RDBMS的一些术语:

  • 数据库: 数据库是一些关联表的集合。
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。
  • 行:一行(元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

MySQL 为关系型数据库(Relational Database Management System), 这种所谓的"关系型"可以理解为"表格"的概念, 一个关系型数据库由一个或数个表格组成,

  • 列(col): 具有相同数据类型的数据的集合;
  • 行(row): 每一行用来描述某条记录的具体信息;
  • 值(value): 行的具体信息, 每个值必须与该列的数据类型相同;
  • 键(key): 键的值在当前列中具有唯一性。

三、基础概念

[1] 关系模式 对关系的逻辑结构和特征的描述。

[2] 关系代数 以关系作为运算对象的代数系统。在数据库中用代数运算来定义关系查询的一种形式化语言。

[3] 数据冗余 同一或同一批数据在同一存储设备或同一系统中多处出现,容易造成数据变更时的不一致。

[4] 元组 与关系对应的二维表中的行。相当于数据文件中的记录。

[5] 第二范式 每一个非主属性完全函数依赖于键的关系模式。

[6] 第一范式 每个属性均不能再分解的关系模式。它是关系模式最基本的规范形式。

[7] 主属性 在关系中能够唯一地标识一个元组的属性组中的诸属性。

[8] 函数依赖 如果一部分属性的值由另外一部分属性的值决定,则称该部分属性函数依赖于另一部分属性。例如基本工资额函数依赖于工资级别。

[9] 第三范式 每一个非主属性既不存在对键的部分函数依赖也不存在对键的传递函数依赖的关系模式。

[10] BC范式 每一个函数依赖的决定因素中均含有键的关系模式。

[11] 数据库设计 对于一个给定的应用环境,构造最优的数据库模式。建立数据库及其应用系统,使之能够有效地存储和管理数据满足各种用户的应用需求。

[12] 关系演算 以一阶谓词演算为基础定义的一种抽象的关系查询语言。

四、函数依赖

在数据库设计和规范化中,函数依赖是一个核心概念。它用于描述关系模式(即表结构)中属性之间的依赖关系,帮助我们理解数据的完整性和冗余性,从而指导我们如何优化数据库设计。

1.函数依赖的基本定义

假设有一个关系模式 R,其中包含一组属性集合 U。如果对于 R 的所有可能的关系实例,只要两个元组在属性集 X 上的值相同,那么它们在属性集 Y 上的值也必然相同,我们就说 X 函数决定 Y,记作 X -> Y。这里,X 是决定因子,Y 是被决定的属性或属性集。

例如,在一个学生信息表中,如果有属性 StudentIDNameMajor,我们可以有函数依赖 StudentID -> NameStudentID -> Major,因为每个学生的学号决定了其名字和专业。

2.函数依赖的类型

  • 平凡函数依赖:如果 YX 的子集,则 X -> Y 称为平凡函数依赖。

  • 非平凡函数依赖:如果 Y 不是 X 的子集,则 X -> Y 秢为非平凡函数依赖。

  • 部分函数依赖:如果 X -> Y,但存在 X 的真子集 Z 使得 Z -> Y,则称 YX 部分函数依赖。

  • 完全函数依赖:如果 X -> Y,且不存在 X 的真子集 Z 使得 Z -> Y,则称 YX 完全函数依赖。

3.函数依赖的性质

  • 自反律:如果 YX 的子集,则 X -> Y 成立。

  • 增广律:如果 X -> Y,则对于任何属性集 Z,都有 XZ -> YZ

  • 传递律:如果 X -> YY -> Z,则 X -> Z

函数依赖是数据库规范化理论的基础,通过理解和应用这些规则,可以消除数据冗余,提高数据的一致性和完整性,从而构建更高效、更可靠的数据库系统。

五、自然连接

自然连接(Natural Join)是一种特殊的数据库操作,主要用于合并两个具有公共属性的关系(表)。它是SQL中最常见的连接类型之一,特别适用于当两个表在某些列上拥有相同的属性名时进行数据整合。

1.自然连接的特点:

  1. 自动匹配列名:自然连接会自动识别两个表之间同名的列,并基于这些列进行连接。如果两个表没有共同的列,自然连接的结果将为空。

  2. 内连接类型:自然连接本质上是一种内连接(INNER JOIN),意味着只有当两个表中的记录在共同列上有匹配时,才会出现在结果集中。不匹配的记录会被排除。

  3. 隐式条件:与使用显式ON子句的JOIN不同,自然连接不需要指定连接条件,因为它会默认使用所有同名的列作为连接键。

2.SQL语法示例:

假设有两个表 EmployeesDepartments,它们都有一个名为 DepartmentID 的列。执行自然连接如下:

Sql

SELECT *
FROM Employees
NATURAL JOIN Departments;

这将返回一个新的表,其中包含了 EmployeesDepartments 表中 DepartmentID 相匹配的所有记录。结果集中的每一行都表示一个员工及其所在部门的信息。

3.注意事项:

  • 在使用自然连接时,应确保两个表中的同名列具有相同的含义和数据类型,否则可能会导致错误或意外的结果。

  • 如果两个表中有多个同名列,自然连接会基于所有同名列进行匹配,这可能不是预期的行为。在需要精确控制连接条件的情况下,使用显式的INNER JOIN语句并指定ON子句通常更为合适。

自然连接简化了查询编写过程,特别是在处理具有明显共享属性的表时,但它也可能引入复杂性和不确定性,尤其是在大型数据库系统中。因此,根据具体场景选择合适的连接类型非常重要。

六、引用关系

引用关系(Referential Relationship)在数据库设计中,尤其是关系型数据库中,指的是实体之间的一种联系,它确保了数据的完整性和一致性。这种关系通常是通过外键约束实现的,外键链接一个表的数据到另一个表的主键,从而建立起表与表之间的关联。

1.主要组成部分:

  1. 主键(Primary Key):在关系型数据库中,每个表至少有一个主键,它唯一标识表中的每一条记录。主键可以由一个或多个字段组成,确保数据行的唯一性。

  2. 外键(Foreign Key):外键是参照另一个表主键的一个或多个字段,用于建立两个表之间的链接。通过外键,一个表(子表)的某条记录可以指向另一个表(父表)中的某条记录。

2.引用关系的作用:

  • 数据完整性:引用关系确保了数据库中数据的一致性和完整性。例如,如果一个表中的记录被删除,那么所有引用该记录的其他表中的相关记录要么也被删除(级联删除),要么保持不变(限制删除)以避免出现孤儿记录。

  • 导航和查询:引用关系允许从一个表的数据轻松导航到另一个表的相关数据,这对于复杂的查询和报告非常有用。

3.实现引用关系:

在创建数据库表时,可以通过定义外键约束来实现引用关系。例如,在SQL中,可以这样定义:

Sql

CREATE TABLE Orders (
    OrderID int PRIMARY KEY,
    CustomerID int,
    OrderDate date,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);

在这个例子中,Orders 表的 CustomerID 字段是一个外键,它引用了 Customers 表的主键 CustomerID。这意味着 Orders 表中的每一个 CustomerID 值必须在 Customers 表中找到对应的值。

引用关系是关系型数据库设计的核心原则之一,它有助于维护数据的逻辑结构和业务规则,确保数据在不同表之间的一致性和相关性。


七、MySQL数据库

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。

  • MySQL 是开源的,目前隶属于 Oracle 旗下产品。
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以运行于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。
  • MySQL 对 PHP 有很好的支持,PHP 是很适合用于 Web 程序开发。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。
  • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[计网初识1] TCP/UDP

学习内容 1.TCP建立链接的3次握手,断开连接的4次挥手 2.TCP报文段组成 内容 1.TCP 建立连接的3次握手? 假设主动方是客户端,被动方是服务端。 第一次 客户端给服务端发送 “hello,我是客户端” (TCP段中 SYN1) 第二次 服务端给客户端发送"我接…

【C++项目】从零实现一个在线编译器

前言 身为一名程序员,想必大家都有接触过像leetcode这样的刷题网站,不知你们在刷题的过程中是否思考过一个问题:它们是如何实现在线编译运行的功能。如果你对此感到好奇,那么本文将一步步带你来实现一个简易在线编译器。 项目概…

【ai_agent】从零写一个agent框架(四)用rust制作一个python的虚拟运行环境。

前言 为了增加框架的扩展性和适用性,我们要能够在流程节点中运行python脚本。 这个时候需要考虑几个问题: 1 为什么是python? 思考:老实说我并不喜欢python,我更倾向于lua这种短小轻快的脚本。在我之前写的规则引擎…

简单仿写SpringIOC

gitee地址(需要自取)ioc_Imitation: 简单仿写IOC (gitee.com) 项目目录结构 Autowired Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface Autowired { }Component Target(ElementType.TYPE) Retention(RetentionPoli…

云服务器centos7报错:Cannot find a valid baseurl for repo: base/7/x86_64

报错显示 我是使用FinalShell连接centos7; 如下图所示,尝试更新显示Cannot find a valid baseurl for repo: base/7/x86_64 网上找了很多教程最后没在点子上,最后我用gpt解决的,这里仅仅做一下记录(因为我会忘记^_^&…

pnpm workspace使用教程【Monorepo项目】

目录 前言一、pnpm简介特点:对比 二、 创建项目添加文件 pnpm-workspace.yaml目录结构pnpm workspace: 协议修改配置文件执行 安装 三、命令解析执行包命令所有包操作命令 四、实例代码 前言 前面两篇,我们讲了 yarn workspace 和 lerna , …

枚举类 (enum)

目录 一、为什么要有枚举类? 二、枚举的简介 三、自定义枚举类 四、使用enum关键字 五、注意事项 一、为什么要有枚举类? 假如我们有这样的一个需求:设计季节类,并创建对象。 我们就需要以下操作,创建Season类&…

基于FPGA的数字信号处理(16)--定点数的舍入模式(7)6种舍入模式的总结

前言 在前面的6篇文章中,分别对6中舍入模式做了详细的介绍,本文在前文的基础上,再对这6种舍入模式做一个对比和总结。 6种舍入模式 在数据处理过程中,为了防止数据溢出而增加位宽是一种很常见的处理方式,但是随着算法链…

保姆级教程:Linux (Ubuntu) 部署流光卡片开源 API

流光卡片 API 开源地址 Github:https://github.com/ygh3279799773/streamer-card 流光卡片 API 开源地址 Gitee:https://gitee.com/y-gh/streamer-card 流光卡片在线使用地址:https://fireflycard.shushiai.com/ 等等,你说你不…

CVE-2024-6387Open SSH漏洞彻底解决举措(含踩坑内容)

一、漏洞名称 OpenSSH 远程代码执行漏洞(CVE-2024-6387) 二、漏洞概述 Open SSH是基于SSH协议的安全网络通信工具,广泛应用于远程服务器管理、加密文件传输、端口转发、远程控制等多个领域。近日被爆出存在一个远程代码执行漏洞,由于Open SSH服务器端…

记录|C#安装+HslCommunication安装

记录线索 前言一、C#安装1.社区版下载2.VS2022界面设置 二、HslCommunication安装1.前提2.安装3.相关文件【重点】 更新记录 前言 初心是为了下次到新的电脑上安装VS2022做C#上机位项目时能快速安装成功。 一、C#安装 1.社区版下载 Step1. 直接点击VS2022,跳转下…

项目实战--Spring Boot + GraphQL实现实时数据推送

背景 用户体验不断提升而3对实时数据的需求日益增长,传统的数据获取方式无法满足实时数据的即时性和个性化需求。 GraphQL作为新兴的API查询语言,提供更加灵活、高效的数据获取方案。结合Spring Boot作为后端框架,利用GraphQL实现实时数据推…

【基于深度学习方法的激光雷达点云配准系列之GeoTransformer】——粗配准

【GeoTransformer系列】——粗配准 1.coarse_matching1.1 概要1.2 功能1.3 超参1.4 input1.5 output2 coarse_target2.1 概要2.2 功能2.3 input2.4 output在模型部分有了初步了解之后, 接下来我们对后续的粗配准、精配准等部分依次进行解读. 本篇主要来看粗配准部分, 代码是在G…

叉车防撞系统:揭秘其多样化工作模式

叉车,作为物流仓储领域的重要工具,其安全性一直备受关注。随着科技的进步,叉车防撞系统应运而生,成为了叉车驾驶员的得力助手。那么,叉车防撞系统究竟是如何实现其安全防护的呢?让我们一同揭开,…

必看 | 最简单获取IP地址专用SSL证书的申请方法

申请IP地址专用的SSL证书并不像传统SSL证书那样普及,不是所有服务商都提供IP地址的SSL证书,因此需要仔细选择合适的服务商和流程进行操作申请,以此来实现IP地址访问的https。以下是最简单的IP地址专用SSL证书申请方法: 一、准备 …

YOLOv10改进 | 损失函数篇 | InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等损失函数

一、本文介绍 本文给大家带来的是YOLOv10最新改进,为大家带来最近新提出的InnerIoU的内容同时用Inner的思想结合SIoU、WIoU、GIoU、DIoU、EIOU、CIoU等损失函数,形成 InnerIoU、InnerSIoU、InnerWIoU、等新版本损失函数,同时还结合了Focus和…

nprogress进度条插件

打开一个页面时,往往会伴随一些请求,并且会在页面上方出现进度条。它的原理时,在我们发起请求的时候开启进度条,在请求成功后关闭进度条,所以只需要在request.js中进行配置。 如下图所示,我们页面加载时发起…

一套完善的孕产妇保健信息化管理平台源码:管理了孕妇从怀孕开始到生产结束42天以内的一系列医院保健服务信息

数字化产科管理平台源码,智慧产科系统源码,采用java语言开发,前端框架为Vue,ElementUIMySQL数据库,前后端分离架构的数字化产科管理系统源码,自主版权,多个大型综合医院、妇幼保健院应用案例&am…

小米恢复联系人,跟着这2个步骤,让你的社交重回巅峰

当你突然发现小米手机里的联系人列表变得空空如也,是不是感觉就像失去了与外界沟通的“秘密武器”?别担心,这并不意味着你真的失去了他们。他们可能只是藏在了手机里的某个神秘角落,等待着你的召唤。接下来,小编将会介…

Redis实战—秒杀优化(Redis消息队列)

回顾 我们回顾一下前文下单的流程,当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤。 1、查询优惠卷 2、判断秒杀库存是否足够 …