MySQL -- 相关知识点

news2024/11/24 20:02:16

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力学

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

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

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

相关文章

代码随想录算法训练营第36期DAY37

DAY37 先二刷昨天的3道题目&#xff0c;每种方法都写&#xff1a;是否已完成&#xff1a;是。 报告&#xff1a;134加油站的朴素法没写对。原因是&#xff1a;在if中缺少了store>0的判断&#xff0c;只给出了indexi的判断。前进法没写出来。因为忘记了总油量的判断。Sum。…

基于Vue的自定义服务说明弹窗组件的设计与实现

基于Vue的自定义服务说明弹窗组件的设计与实现 摘要 随着技术的不断发展&#xff0c;前端开发面临着越来越高的复杂性和不断变化的需求。传统开发方式往往将整个系统构建为整块应用&#xff0c;这导致对系统的任何微小改动都可能触发整体的逻辑变更&#xff0c;从而增加了开发…

第二证券:见证历史!印度这一交易所市值突破5万亿美元

又一次见证前史&#xff01; 孟买证券交易所本周实现了一个重要的里程碑&#xff0c;其市值突破5万亿美元&#xff0c;总市值在不到6个月的时间里添加了1万亿美元。 据了解&#xff0c;印度股市两大交易所别离为孟买证券交易所&#xff08;BSE&#xff09; 和国家证券交易所&…

discuzX2.5的使用心得 札记一

从开始接受php论坛的开发任务&#xff0c;对php感兴趣的我开始迷恋上discuz这个产品了&#xff0c; 像戴志康这样的创新人才&#xff0c;是我们这代人的骄傲和学习的榜样 应该是了解一下&#xff0c;啥事discuzX2.5&#xff0c;百度看一下 discuz x2.5_百度百科 看完百度词条…

如何通过软件IIC使用MPU6050陀螺仪

目录 1. MPU6050简介 2. MPU6050参数 3. MPU6050硬件电路 4. 代码编写 4.1 MPU6050写寄存器 4.2 MPU6050读寄存器 4.3 初始化 4.4 MPU6050获取ID号 4.5 MPU6050获取数据 1. MPU6050简介 MPU6050是一个6轴姿态传感器&#xff0c;可以测量芯片自身X、Y、Z轴的…

AWTK实现汽车仪表Cluster/DashBoard嵌入式GUI开发(七):快启

前言: 汽车仪表是人们了解汽车状况的窗口,而仪表中的大部分信息都是以指示灯形式显示给驾驶者。仪表指示灯图案都较为抽象,对驾驶不熟悉的人在理解仪表指示灯含义方面存在不同程度的困难,尤其对于驾驶新手,如果对指示灯的含义不求甚解,有可能影响驾驶的安全性。即使是对…

关于新配置的adb,设备管理器找不到此设备问题

上面页面中一开始没有找到此android设备&#xff0c; 可能是因为我重新配置的adb和设备驱动&#xff0c; 只把adb配置了环境变量&#xff0c;驱动没有更新到电脑中&#xff0c; 点击添加驱动&#xff0c; 选择路径&#xff0c;我安装时都放在了SDK下面&#xff0c;可以尝试…

怎么查看公网IP?

在网络通信中&#xff0c;每个设备都会被分配一个IP地址&#xff0c;用于在互联网上进行唯一标识和通信。公网IP是指可以被公开访问的IP地址&#xff0c;可以用来建立远程连接或者进行网络访问等操作。怎么查看公网IP呢&#xff1f;下面将介绍几种常用的方法。 使用命令行查询公…

mainwindow.ui和mainwindow.h和ui_mainwindow.h这几个文件之间的联系是什么

在Qt应用程序开发中&#xff0c;mainwindow.ui, mainwindow.h, 和 ui_mainwindow.h 这三个文件之间有着紧密的联系&#xff0c;共同构成了使用Qt Designer设计的图形用户界面&#xff08;GUI&#xff09;应用程序的基础。下面是这三个文件各自的作用及它们之间的关联&#xff1…

linux day7 wget,curl

wget下载命令 curl [-O] 网址 不写-O表示请求网址&#xff0c;会返回网页html代码 写-O表示请求下载网页文件

基于因果图的灰度故障定位

简 介 本文介绍由南开大学、华为技术有限公司、清华大学共同合作的论文&#xff1a;面向服务器操作系统的非侵入式灰度故障定位。该论文已被The ESEC/FSE Conference 2024&#xff08;The ACM Joint European Software Engineering Conference and Symposium on the Foundatio…

【易生支付官网注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

mybatisPlus-DB静态工具

方法跟mybatisplus的service接口非常像&#xff0c;静态工具可以避免依赖循环注入。

异步爬虫学习实战项目:水效标识网

大家好&#xff0c;我是南枫&#xff0c;今天一起来学习异步爬虫。 文章开始之前&#xff0c;我们先搞清楚为什么要学异步爬虫&#xff1f;我们之后在工作中会遇到爬大量数据&#xff0c;比如百万数据采集&#xff0c;用平常的方法爬取的效率会比较低&#xff0c;所以要学习异…

React 其他 Hooks

其他 Hooks useRef 可用于获取 DOM 元素 const ScrollRef useRef(null)ScrollRef.current useContext &#xff08;先回顾一下之前的 Context 知识&#xff0c;借用之前 ppt 和源码&#xff09; Hooks 中使用 useContext 来获取 context 的值 // 父组件创建 contextexpor…

在MySQL数据库中的视图和事务。

视图 view 临时表 作用&#xff1a;优化多表查询的效率 可以将经常使用的连接查询结果使用视图进行保存&#xff0c;避免多次重复的笛卡尔积运算 MySQL数据库在多表查询的时候会自动进行笛卡尔积运算。 如果将来经常要用到某一个多表查询的结果就可以使用视图将这个结果…

Android 观察者模式(OBSERVER)应用详解

文章目录 1、观察者模式设计初衷1.1. 解耦对象之间的依赖关系1.2. 允许动态的依赖关系1.3. 自动通知和更新1.4 设计初衷的详细说明1. 对象之间的解耦2. 动态依赖关系3. 自动更新 2、实现细节2.1. Subject 接口和实现2.2. Observer 接口和实现2.3. 主类 3、主要角色4、关系示意图…

Nginx - Stream 日志模块不完全指北

文章目录 Pre官网Nginx Stream模块基础功能Nginx Stream访问日志的缺陷解决方案或替代方案安装和配置nginx-log-enhancement模块1. 下载nginx-log-enhancement模块源代码2. 解压源代码3. 配置Nginx源代码4. 编译和安装Nginx5. 配置nginx-log-enhancement模块6. 重启Nginx7. 测试…

I/O '24|学习资源焕新,技术灵感升级

2024 年 5 月 15 日凌晨举行的 Google I/O 大会为各地的开发者们带来了新的灵感。面对技术革新&#xff0c;相信各位开发者们都迫不及待想要自己上手试一试。 别急&#xff0c;Google 谷歌今年为中国的开发者们准备了一份特别的学习资源&#xff0c;让开发者们自由探索新知。 G…

RedisTemplate操作Redis, 看这一篇文章就够了

文章目录 1. String 命令1.1 添加缓存1.2 设置过期时间(单独设置)1.3 获取缓存值1.4 删除key1.5 顺序递增1.6 顺序递减1.7 常用的 2. Hash命令2.1 添加缓存2.2 设置过期时间(单独设置)2.3 添加一个Map集合2.4 提取所有的小key2.5 提取所有的value值2.6 根据key提取value值2.7 获…