MySQL -- 相关知识点

1.数据库相关介绍

数据库的选择通常取决于具体的应用需求,如性能、扩展性、数据一致性和易用性等因素。

1. 关系型数据库(RDBMS)

  • MySQL

    • 广泛使用的开源数据库,支持大多数操作系统。
    • 强调易用性、灵活性和广泛的社区支持。
    • 主要用于Web应用。
  • PostgreSQL

    • 另一种强大的开源关系型数据库,以其稳定性和高级功能(如高级索引、全文搜索、JSON支持)著称。
    • 通常被视为企业级数据库,支持更复杂的查询和更大的数据量。
  • Oracle Database

    • 企业级商业数据库解决方案,提供全面的特性支持,包括高级数据管理、安全性和可靠性。
    • 常用于需要高事务处理和复杂查询操作的大型企业和金融机构。
  • Microsoft SQL Server

    • 面向企业的数据库产品,集成了大量管理工具,优化了.NET环境的数据操作。
    • 常用于企业环境,与其他Microsoft产品(如Excel和Power BI)有很好的集成性。

2. 非关系型数据库(NoSQL)

  • MongoDB

    • 文档型数据库,以其高性能、高可扩展性和易用性著称。
    • 数据以类似JSON的格式存储,使其在处理大规模数据集时非常灵活。
  • Cassandra

    • 高度可扩展的分布式NoSQL数据库,设计用于处理大量数据 across many commodity servers.
    • 提供高可用性而不牺牲性能,适合需要大规模数据分布的应用。
  • Redis

    • 开源的键值存储数据库,常用作数据缓存和消息队列。
    • 支持数据结构如字符串、列表、集合、散列等。

主要区别

  • 数据结构

    • 关系型数据库使用表格和行的结构,适合需要执行复杂查询的应用。
    • 非关系型数据库(如文档、键值、宽列存储)则更灵活,适合于非结构化数据。
  • 事务性

    • 关系型数据库支持ACID属性(原子性、一致性、隔离性、持久性),确保数据的完整性。
    • 部分非关系型数据库牺牲了事务性以换取性能和扩展性。
  • 扩展性

    • 关系型数据库通常扩展性较差,尤其是垂直扩展。
    • 非关系型数据库设计为水平扩展,可以通过增加更多服务器来增加容量。
  • 查询能力

    • 关系型数据库支持复杂的查询语言(如SQL),适合复杂的数据分析。
    • 非关系型数据库的查询功能比较基础,主要优化了读/写操作的速度。

选择哪种数据库取决于具体项目的需求,如数据模型、预期负载、扩展需求等。理解每种数据库的特点和局限是选择最合适数据库的关键。

2. MySQL 数据类型

数值类型
  • 整数类型INTSMALLINTTINYINTMEDIUMINTBIGINT。有符号范围从 -128 到 127TINYINT),无符号范围从 0 到 255
  • 定点数类型DECIMALNUMERIC。可以精确表示。
  • 浮点数类型FLOATDOUBLE。用于表示有小数点的数值。
字符串类型
  • 文本类型CHARVARCHAR(可变长度字符串)。
  • 长文本类型TEXTBLOB,以及它们的变种 TINYTEXTMEDIUMTEXTLONGTEXT
日期和时间类型
  • 日期类型DATE(仅日期),DATETIME(日期和时间),TIMESTAMP(时间戳,具有时区支持),TIME(时间),YEAR(年份)。
ENUM 和 SET
  • ENUM:列出所有可能的值。
  • SET:允许选择多个值,类似于一个包含多个预定义值的集合。

3. MySQL 运算符

算数运算符
  • 基本运算:+-*/%(取余)
逻辑运算符
  • ANDORNOT,用于条件组合。
比较运算符
  • =!= 或 <>(不等于),><>=<=BETWEENLIKEIN

4. MySQL 常用函数

字符串函数
  • CONCAT():串联字符串。
  • LENGTH():返回字符串的字节长度。
  • SUBSTRING():截取部分字符串。
  • LOWER()UPPER():转换字母大小写。
数值函数
  • ABS():绝对值。
  • ROUND():四舍五入。
  • CEIL()FLOOR():向上/向下取整。
时间和日期函数
  • NOW():当前的日期和时间。
  • CURDATE():当前日期。
  • DATEDIFF():计算两个日期之间的差。
聚合函数
  • SUM():求和。
  • AVG():平均值。
  • COUNT():计数。
  • MAX()MIN():最大值、最小值。

5. MySQL 完整性约束

完整性约束的类型包括:
  • PRIMARY KEY:主键,唯一标识表中的每一行。
  • FOREIGN KEY:外键,引用另一个表的主键。
  • UNIQUE:唯一约束,保证数据的唯一性。
  • NOT NULL:非空约束,保证列不接受 NULL 值。
  • CHECK:检查约束(在MySQL 8.0.16及以上版本中支持),限制列中值的范围。

test:

CREATE TABLE user (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY COMMENT '用户的主键id',
    nickname VARCHAR(50) UNIQUE NOT NULL COMMENT '用户的昵称',
    age TINYINT UNSIGNED NOT NULL DEFAULT 18 COMMENT '用户的年龄,默认为18',
    sex ENUM('male', 'female') NOT NULL COMMENT '用户的性别'
);
  1. id:一个无符号整数(INT UNSIGNED),设定为自动递增(AUTO_INCREMENT)。作为主键,用来唯一标识表中的每一行。
  2. nickname:一个长度为50的字符串,设定为唯一(UNIQUE)且不允许为空(NOT NULL)。用来存储用户的昵称。
  3. age:一个无符号的小整数(TINYINT UNSIGNED),不允许为空(NOT NULL),默认值为18。用来存储用户的年龄。
  4. sex:一个枚举类型(ENUM),只允许为'male'或'female',不允许为空。用来表示用户的性别。

6. 关系型数据库表设计(关系模型)

关系型数据库的表设计涉及到如何合理地组织数据以及各个数据表之间的关联关系。根据关联性质,关系可以分为三种类型:

  • 一对一关系:一个表中的记录只与另一个表中的一条记录相关联。例如,用户表和用户详情表,每个用户只有一个详细信息记录,反之亦然。

  • 一对多关系:一个表中的记录可以与另一个表中的多条记录相关联。最典型的例子是,用户表和订单表,一个用户可以有多个订单,但每个订单只能属于一个用户。

  • 多对多关系:一个表中的记录可以与另一个表中的多条记录相关联,反之亦然。例如,学生表和课程表,一个学生可以注册多门课程,一门课程也可以由多个学生注册。通常通过一个中间表来实现这种关系,如学生课程关系表。

7. 关系型数据库范式

范式(Normalization)是为了减少数据库中数据冗余和改善数据结构设计的一系列规则。主要范式包括:

  • 第一范式(1NF):表的每一列都是不可分割的基本数据项,同一列中不能有多个值,即属性的原子性。

 假设有一个学生参与的课程表如下:

学生ID学生姓名课程
1张三数学, 物理

这个表不满足第一范式,因为课程列有多个值。为了满足1NF,需要将课程列分解为不可分割的单个项:

学生ID学生姓名课程
1张三数学
1张三物理
  • 第二范式(2NF):在1NF的基础上,非主属性完全依赖于主键,消除了非主属性对主键的部分依赖。

例子: 假设有一个学生参与的课程表如下:

学生ID学生姓名课程
1张三数学, 物理

这个表不满足第一范式,因为课程列有多个值。为了满足1NF,需要将课程列分解为不可分割的单个项:

学生ID学生姓名课程
1张三数学
1张三物理
  • 第三范式(3NF):在2NF的基础上,任何非主属性不依赖于其他非主属性,消除了传递依赖。

假设现有订单明细表:

订单ID产品ID产品名称产品制造商
100101笔记本电脑联想
100102鼠标罗技

产品名称和产品制造商都依赖于产品ID,这是一个传递依赖。为满足3NF,需要进一步分解表:

产品表:

产品ID产品名称产品制造商
01笔记本电脑联想
02鼠标罗技

订单明细表仅保留产品ID:

订单ID产品ID
100101
100102
  • Boyce-Codd范式(BCNF):更严格的3NF,要求表中的每一个决定因素都是候选键,处理复杂的依赖和冗余问题。

如果在上面的产品表中,产品ID和产品名称都可以唯一确定记录,并且存在如下依赖:产品ID → 产品名称,产品名称 → 产品制造商。该表不满足BCNF,因为产品名称也能决定产品制造商。我们需要进一步规范化以满足BCNF:

产品表:

产品名称产品制造商
笔记本电脑联想
鼠标罗技
  • 第四范式(4NF):在BCNF的基础上,消除表中的多值依赖。

假设一个教师可教授多个课程,并且有多个研究领域。这些信息存在多值依赖。

教师ID课程研究领域
T01数学, 物理代数, 力学

教师课程表:

教师ID课程
T01数学
T01物理

教师研究领域表:

教师ID研究领域
T01代数
T01力学

这样的设计确保了每张表中只含有与主键相关的多值依赖,避免了非主键属性间的依赖,符合第四范式的要求。通过这种分解,我们可以更有效地管理和维护数据,同时减少数据冗余和更新异常。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flutter Text导致A RenderFlex overflowed by xxx pixels on the right.

使用Row用来展示两个Text的时候页面出现如下异常,提示"A RenderFlex overflowed by xxx pixels on the right." The following assertion was thrown during layout: A RenderFlex overflowed by 4.8 pixels on the right.The relevant error-causing widget was:…

ClickHouse课件

列式存储数据库&#xff1a;hbase clickhouse 简介 ClickHouse入门 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用于在线分析处理查询&#xff08;OLAP&#xff09;&#xff0c;能够使用…

K8S中YAML案例

目录 案例&#xff1a;自主式创建service并关联上面的pod 案例&#xff1a;部署redis 案例&#xff1a;部署myapp 案例&#xff1a;部署MySQL数据库 总结 1.K8S集群中访问流向 K8S集群外部&#xff1a;客户端——nodeIP&#xff1a;nodeport——通过target port——podIP…

【排序算法】堆排序(Heapsort)

✨✨✨专栏&#xff1a;排序算法 &#x1f9d1;‍&#x1f393;个人主页&#xff1a;SWsunlight 目录 ​编辑 前言&#xff1a; 一、堆排序&#xff1a; 时间复杂度&#xff1a; 空间复杂度&#xff1a; 算法稳定性&#xff1a; 二、升序的实现&#xff1a;通过建大堆实…

find 几招在 Linux 中高效地查找目录

1. 介绍 在 Linux 操作系统中&#xff0c;查找目录是一项常见的任务。无论是系统管理员还是普通用户&#xff0c;都可能需要查找特定的目录以执行各种操作&#xff0c;如导航文件系统、备份数据、删除文件等。Linux 提供了多种命令和工具来帮助我们在文件系统中快速找到目标目…

百度软件测试面试经历,期望薪资27K

一面 1、 请为百度搜索框设计测试用例&#xff1f; 2、百度设计框上线前需要进行那些测试&#xff1f; 界面测试&#xff0c;功能测试&#xff0c;性能测试&#xff0c;安全性测试&#xff0c;易用性测试&#xff0c;兼容性测试&#xff0c;UI测试。 3、如何查看http状态码…

高通 Android 12/13冻结屏幕

冻结屏幕很多第一次听到以为是Android一种异常现象&#xff0c;实则不然&#xff0c;就是防止用户在做一些非法操作导致问题防止安全漏洞问题。 1、主要通过用户行为比如禁止下拉状态栏和按键以及onTouch事件拦截等&#xff0c;不知道请看这篇文章&#xff08;Touch事件传递流…

WPF模板样式Style用法

在Windows Presentation Foundation (WPF) 中&#xff0c;样式&#xff08;Style&#xff09;和模板&#xff08;Template&#xff09;是创建丰富且可重用的UI元素的强大工具。样式允许你定义一组属性设置&#xff0c;这些设置可以应用于一个或多个控件&#xff0c;而模板则允许…

Flink-cdc更好的流式数据集成工具

What’s Flink-cdc? Flink CDC 是基于Apache Flink的一种数据变更捕获技术&#xff0c;用于从数据源&#xff08;如数据库&#xff09;中捕获和处理数据的变更事件。CDC技术允许实时地捕获数据库中的增、删、改操作&#xff0c;将这些变更事件转化为流式数据&#xff0c;并能够…

正反向shell

正反向shell 在实际的应用场景中一般是先找到可以命令执行的漏洞&#xff0c;如果目标主机没有ncat我们要先执行下载ncat命令在被控的服务器上 正向shell 应用场景&#xff1a;在被控端的访问没有限制的时候&#xff0c;控制端向被控端发起了链接&#xff0c;控制端可以是公…

在aspNetCore中 使用System.Text.Json的定制功能, 将定制化的json返回给前端

C# 默认大写, 而大部分的前端默认小写, 这时候可以如此配置: builder.Services.AddControllers().AddJsonOptions((opt) > {opt.JsonSerializerOptions.PropertyNamingPolicy System.Text.Json.JsonNamingPolicy.CamelCase;opt.JsonSerializerOptions.WriteIndented true…

InfLLM的笔记

文件中提供的代码是一个Python函数chat_loop&#xff0c;它是聊天系统的核心循环。以下是对这段代码逻辑的梳理&#xff1a; 函数定义与参数 chat_loop函数接收多个参数&#xff0c;用于配置聊天模型和聊天环境。参数包括模型路径、设备类型、GPU数量、最大GPU内存、数据类型…

安装测缝计安装事项详解

在建筑和工程领域&#xff0c;测量缝隙和裂缝的准确性对于工程质量和安全性至关重要。测缝计作为一种专业的测量工具&#xff0c;能够帮助工程师和施工人员准确测量和监测建筑结构的缝隙情况&#xff0c;进而采取合适的修复和加固措施&#xff0c;保证建筑物的稳定性和安全性。…

Covalent的CQT质押迁移比率在以太坊上升至13%,超Moonbeam记录

Covalent Network&#xff08;CQT&#xff09;作为领先的结构化模块化数据基础设施层&#xff0c;目前其在以太坊上的 CQT 质押比率已超过之前在 Moonbeam 上达到的历史最高水平。自从将质押合约迁移到以太坊不到一个月的时间里&#xff0c;超过总供应量的 13% 的 CQT 代币已被…

Unity中计数器的实现

Unity中计数器的实现 一、前言二、效果与逻辑&#xff08;一&#xff09; 实现效果&#xff08;二&#xff09;功能逻辑 三、功能代码四、应用实现五、结语 一、前言 最近在开发中用到计数器&#xff0c;但是unity自带的UI组件中没有&#xff0c;所以只好自己手撸了一个&#x…

2024电工杯数学建模选题建议及各题思路来啦!

大家好呀&#xff0c;2024电工杯数学建模竞赛开始了&#xff0c;来说一下初步的选题建议吧&#xff1a; 首先定下主基调&#xff0c; 本次电工杯建议选B。A题目难度较高&#xff0c;只建议有相关专业知识和优化经验的队伍选择&#xff0c;小白队伍无脑选B即可。是比较经典的数…

Python数字比大小获取大的数

目录 一、引言 二、数字比较的基本语法 三、获取较大的数 使用条件语句 使用内置函数 四、处理特殊情况 比较非数字类型 处理无穷大和NaN 五、应用实例 在游戏开发中比较分数 在数据分析中找出最大值 六、优化与性能 七、总结 一、引言 在Python编程的广阔天地中…

JS 实现鼠标框选(页面选择)时返回对应的 HTML 或文案内容

JS 实现鼠标框选&#xff08;页面选择&#xff09;时返回对应的 HTML 或文案内容 一、需求背景 1、项目需求 当用户进行鼠标框选选择了页面上的内容时&#xff0c;把选择的内容进行上报。 2、需求解析 虽然这需求就一句话的事&#xff0c;但是很显然&#xff0c;没那么简单…

如何使用maven运行SpringBoot程序?

目录 一、什么是maven 二、什么是SpringBoot 三、如何使用maven运行SpringBoot程序&#xff1f; 一、什么是maven Maven&#xff1a;简化Java项目构建的自动化工具 在软件开发的世界里&#xff0c;Maven以其强大的项目管理和构建自动化功能&#xff0c;为Java开发者提供了…

软件设计师-上午题-计算题汇总

一、存储系统 - 存储容量计算&#xff08;字节编址、位编址、芯片个数&#xff09; 内存地址是16进制 内存地址编址的单位是Byte&#xff0c;1K1024B 1B 8 bit 1.计算存储单元个数 存储单元个数 末地址 - 首地址 1 eg. 按字节编址&#xff0c;地址从 A4000H 到 CBFFFH&…