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学生姓名课程ID课程名称课程教师
1张三101数学李老师
1张三102物理王老师
2李四101数学李老师
2李四103化学赵老师

在这个表中,每个课程的教师(课程教师)是由课程ID决定的,而不是由学生ID和课程ID共同决定。这意味着存在部分依赖,因为课程教师只依赖于课程ID的一部分,而不是整个复合键(学生ID和课程ID)。为了满足第二范式,需要消除这个部分依赖,将表格分解为两个表,从而确保每个非主属性只依赖于整个主键。

学生选课表:
学生ID学生姓名课程ID
1张三101
1张三102
2李四101
2李四103
课程信息表:
课程ID课程名称课程教师
101数学李老师
102物理王老师
103化学赵老师

 

  • 第三范式(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力学

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

8.MySQL核心SQL

结构化查询语句SQL

SQL(结构化查询语言)是用于管理关系数据库系统的标准编程语言,主要用于存储、操作和检索数据库中的数据。以下是一些基本的SQL知识点和常用命令:


1. 数据定义语言 (DDL):

DDL允许用户定义或修改数据库结构。

  • CREATE: 创建新表或数据库。
  CREATE TABLE students (id INT PRIMARY KEY,name VARCHAR(50),age INT);
  • ALTER: 修改现有的数据库结构,如添加、删除或修改列。
ALTER TABLE students ADD COLUMN email VARCHAR(100);
  • DROP: 删除表或数据库。
  DROP TABLE students;

2. 数据操作语言 (DML):

DML允许用户对数据进行插入、修改、删除和查询。

  • INSERT: 向表中添加新行。
  INSERT INTO students (id, name, age) VALUES (1, 'Alice', 21);
  • UPDATE: 更新表中的数据。
  UPDATE students SET age = 22 WHERE id = 1;
  • DELETE: 从表中删除数据。
  DELETE FROM students WHERE id = 1;
  • SELECT: 查询表中的数据。
  SELECT * FROM students WHERE age &gt; 20;

3. 数据控制语言 (DCL)

DCL用于控制不同用户对数据库中数据的访问。

  • GRANT: 授予权限。
  GRANT SELECT ON students TO user1;
  • REVOKE: 撤销权限。
  REVOKE SELECT ON students FROM user1;

4. 事务控制

SQL支持事务控制,以保证数据的完整性。

  • BEGIN TRANSACTION: 开始一个事务。
  • COMMIT: 提交当前事务,使之前的操作得到永久保存。
  • ROLLBACK: 回滚当前事务,撤销之前的所有操作。

5. 约束

约束用于确保数据库中数据的准确性和可靠性。

  • PRIMARY KEY: 唯一标识数据库表中的每条记录。
  • FOREIGN KEY: 一种约束,用于与另一表的主键字段建立链接,保持数据一致性。
  • NOT NULL: 确保列不能有NULL值。
  • UNIQUE: 确保所有列中的值都是唯一的。

6. 索引

索引用于提高数据库的查询速度。

  • CREATE INDEX: 在表中的一个或多个列上创建索引,提高搜索速度。
  CREATE INDEX idx_name ON students (name);

库操作

查询数据库

show databases;

创建数据库

create database ChatDB;

删除数据库

drop database ChatDB;

选择数据库

use ChatDB;

表操作

查看表

show tables;

创建表

create table user(id int unsigned primary key not null auto_increment,
name varchar(50) not null,
age tinyint not null,
sex enum('M','W') not null)engine=INNODB default charset=utf8;

查看表结构

desc user;

查看建表sql

show create table user\G

删除表

drop table user;

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

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

相关文章

基于Java+MySQL+Swing的学生管理系统

1.系统简介和开发背景 该同学工作积极主动、高效&#xff0c;学习认真&#xff0c;待人诚恳&#xff0c;能够做到服从指挥、认真听取老同志的指导&#xff0c;不怕苦、不怕累&#xff0c;表现有较强的求知欲&#xff0c;积极观察、体验、思考&#xff0c;并能够灵活运用自己的知…

自养号测评是什么?亚马逊、沃尔玛、Target卖家如何建立自己的护城河?

近期有跨境卖家咨询我自养买家账号测评的事情&#xff0c;他们还是有不了解自养号测评的&#xff0c;所以珑哥觉得有必要再讲一下卖家测评的一些事情&#xff0c;之前文章也说过。这可能是跨境卖家运营的一个趋势。今天珑哥着重来介绍一下自养号测评 一、什么叫做自养号测评&a…

OrangePi AIpro初体验之图片视频检测案例真实测评

OrangePi AIpro简介 OrangePi AIpro官网 Orange Pi AI Pro 开发板是香橙派联合华为精心打造的高性能AI 开发板&#xff0c;其搭载了昇腾AI 处理器&#xff0c;可提供8TOPS INT8 的计算能力&#xff0c;内存提供了8GB 和16GB两种版本。可以实现图像、视频等多种数据分析与推理…

全球点赞最高的人颜廷利:真正的人生目标是什么

在那个充满生机的2024年春天&#xff0c;记者有幸对中国第一起名大师的老师颜廷利教授进行了深入的访谈。带着对其人生哲学的强烈好奇&#xff0c;记者紧张而期待地提出了问题&#xff1a;“颜教授&#xff0c;您在漫长的人生旅途中最追求的是什么&#xff1f;” 宁夏银川、山东…

PMP考试没有考过应该如何再考?

一、接受失败&#xff0c;理性分析 其实&#xff0c;PMP考试可以在PMI一年有效期内提交补考申请&#xff0c;若已经过了一年有效期&#xff0c;考生则需要重新进行完整的PMP考试报名流程。PMP考试补考费用&#xff1a;2500元/次。 1.接受失败&#xff1a;接受并处理情绪。面对…

【Python数据分析】基于自回归积分滑动平均模型的疫情分析报告 附完整python代码

资源地址&#xff1a;Python数据分析大作业 2000字 图文分析文档 疫情分析完整python代码 数据分析 数据来自法国疫情数据 资源地址&#xff1a;Python数据分析大作业 2000字 图文分析文档 疫情分析完整python代码 代码详解 完整代码文件 主要是对时间序列数据进行分析和预…

技术面‍:前端代码是如何与服务器交互的

前言&#xff1a; 本篇文章主要是想讲解 .html 文件和 .CSS 文件在实际开发中和后端服务器交互最后上线的基础原理。 面向的人群&#x1f195;&#xff1a;是刚入行不久&#xff0c;且目前只会写前端业务代码而不清楚整个工作流的前端新人。我会从 0 开始一步一步带你理解整个…

大规模敏捷SA(Leading SAFe)证书是什么意思?如何报名,含金量高吗?

大规模敏捷SA(Leading SAFe)证书是什么意思&#xff1f; 常规的敏捷框架适用于中小型项目团队&#xff0c;而且不具有扩展性。基于常规的敏捷框架&#xff0c;SAFe定义了一个可扩展的敏捷框架模型&#xff0c;它适用于大型团队的合作开发&#xff0c;可以提高团队之间的协作性…

【再探】设计模式—职责链模式、命令模式及迭代器模式

行为型设计模式研究系统在运行时对象之间的交互&#xff0c;进一步明确对象的职责。有职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式及访问模式共11种。 1 职责链模式 需求&#xff1a;1) 请求能被多…

如何使用golang自带工具对代码进行覆盖率测试

在 Go 语言中&#xff0c;测试代码覆盖率通常使用 go test 命令结合 -cover 和 -coverprofile 1. 基本代码覆盖率报告 在项目目录下运行以下命令 go test -cover这将在控制台输出一个代码覆盖率的百分比。但是&#xff0c;这种方式不会保存覆盖率数据&#xff08;可以指定目…

反对加征关税,特斯拉上海厂传减产20% | 百能云芯

特斯拉公司首席执行官马斯克近日在公开场合表达了对美国计划对中国电动车加征关税的反对立场&#xff0c;强调特斯拉不支持任何扭曲市场的举措。据知情人士透露&#xff0c;特斯拉上海工厂正计划在今年第二季度至少削减Model Y车型的产量20%&#xff0c;以应对市场需求的变化。…

C#读取.sql文件并执行文件中的sql脚本

有些时候我们需要在程序中编写读取sql脚本文件并执行这些sql语句&#xff0c;但是我们在有些时候会遇到读出来的sql语句不能执行&#xff0c;其实不能执行并不是你的sql脚本文件有错误&#xff0c;而是去执行sql语句的时候&#xff0c;C#代码里面执行sql语句的代码对sql里面的一…

低代码与人工智能:改变软件开发的未来

引言 在当今快速发展的科技时代&#xff0c;软件开发行业也在不断地创新和演进。其中&#xff0c;低代码开发和人工智能技术是两个备受关注的领域&#xff0c;低代码开发通过简化开发流程和降低编码难度&#xff0c;使得软件开发变得更加高效和便捷&#xff0c;而人工智能技术…

正宇软件:引领数字人大新纪元,开启甘肃人大代表履职新篇章

在数字化强国的主旋律之下&#xff0c;政府工作的数字化、智能化转型已成为提升治理效能、增强人民满意度的关键一环。在这个大背景下&#xff0c;正宇软件技术开发有限公司以其卓越的技术实力和丰富的行业经验&#xff0c;成为了政府信息化建设的杰出代表。甘肃省人大代表履职…

基于 Wireshark 分析 TCP 协议

一、TCP 协议 TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输层协议。它在网络通信中扮演着重要的角色&#xff0c;用于保证数据的可靠传输。 TCP协议的特点如下&#xff1a; 1. 面向连接&#xff1a;在通信前需要先建立连接&#x…

Hunyuan-DiT环境搭建推理测试

引子 最近鹅厂竟然开源了一个多模态的大模型&#xff0c;之前分享福报厂的多模态视觉大模型&#xff08;Qwen-VL环境搭建&推理测试-CSDN博客&#xff09;感兴趣的可以移步。鹅厂开源的&#xff0c;我还是头一回部署。好的&#xff0c;那就让我们看看这个多模态视觉大模型有…

强化学习,第 3 部分:蒙特卡罗方法

文章目录 一、介绍二、关于此文章三、无模型方法与基于模型的方法四、V函数估计4.1 基本概念4.2 V-功能 五、Q 函数估计5.1 V函数概念5.2 优势5.3 Q函数 六、勘探与勘探的权衡七、结论 一、介绍 从赌场到人工智能&#xff1a;揭示蒙特卡罗方法在复杂环境中的强大功能    强化…

zstd库数据压缩与解压缩

在 Visual Studio 2019 中使用 C 的 zstd 库进行数据压缩与解压缩 在今天的博客中&#xff0c;我们将探讨如何在 Visual Studio 2019 中使用 zstd 库进行高效的数据压缩和解压缩。zstd&#xff08;也称为 Zstandard 或 zstd&#xff09;是由 Facebook 开发的开源压缩库&#x…

动手学深度学习22 池化层

动手学深度学习22 池化层 1. 池化层2. 实现3. QA 课本&#xff1a; https://zh-v2.d2l.ai/chapter_convolutional-neural-networks/pooling.html 视频&#xff1a; https://www.bilibili.com/video/BV1EV411j7nX/?spm_id_fromautoNext&vd_sourceeb04c9a33e87ceba9c9a2e5f0…

关于单元测试

关于单元测试的一些总结&#xff1a;