当前位置: 首页 > article >正文

MySQL 部分重点知识篇

一、数据库对象

1. 主键

  • 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。

  • 作用 :确保数据的完整性,便于数据的查询和管理。

  • 示例 :在学生信息表中,学号可以作为主键,因为每个学生的学号是唯一的。

创建包含主键的表的 SQL 示例

CREATE TABLE student (id INT PRIMARY KEY,name VARCHAR(100),age INT
);

2. 外键

  • 定义 :外键是一个表中的字段,其值引用另一个表中的主键值,用于建立两个表之间的关联关系。

  • 作用 :维护数据的一致性和完整性,通过外键约束,确保相关数据之间的对应关系。

  • 示例 :在订单表中,客户 ID 可以作为外键,引用客户信息表中的主键客户 ID,从而关联订单和客户信息。

创建包含外键的表的 SQL 示例

CREATE TABLE order (order_id INT PRIMARY KEY,customer_id INT,order_date DATE,FOREIGN KEY (customer_id) REFERENCES customer (id)
);

3. 触发器

  • 定义 :触发器是数据库中的一种特殊存储过程,当对表进行插入、更新或删除操作时,会自动触发执行。

  • 作用 :用于实现复杂的业务逻辑、数据验证、审计等功能。

  • 示例 :当向员工工资表中插入新记录时,可以触发一个触发器自动计算工资总额并更新到相应的统计表中。

4. 存储过程

  • 定义 :存储过程是一组预编译的 SQL 语句,存储在数据库中,可通过指定名称调用执行。

  • 作用 :提高代码复用性、执行效率,减少网络传输,便于维护和安全管理。

  • 示例 :创建一个存储过程用于查询指定学生的成绩信息,调用该存储过程时只需传入学生 ID 即可获取成绩数据。

二、数据操作语句

1. DROP、DELETE、TRUNCATE

操作类型作用特点
DROP删除表结构及数据,删除后无法通过 ROLLBACK 操作恢复用于删除整个表,操作后表不存在
DELETE删除表中的指定数据行,支持 WHERE 子句进行条件筛选,可结合事务回滚用于删除指定行,操作后表结构仍存在
TRUNCATE清空表中所有数据,速度快,不记录删除的每行数据日志,无法回滚用于快速删除表中所有行,操作后表结构仍存在,相当于 DELETE 语句删除所有行

2. 非关系型数据库与关系型数据库对比

数据库类型特点示例
关系型数据库采用关系模型来组织和存储数据,以表格形式呈现,具有固定的模式结构,支持 SQL 查询语言,强调数据的一致性和完整性,适合处理结构化数据。MySQL、Oracle、SQL Server 等
非关系型数据库不采用关系模型来组织和存储数据,常见的有键值存储、文档存储、列族存储、图数据库等类型。具有灵活的数据结构、高可扩展性、高性能读写等优点,适用于处理大规模、复杂多变的数据类型。MongoDB(文档型)、Redis(键值型)、HBase(列族型)、Neo4j(图数据库型)

3. 非关系型数据库

  • 定义 :非关系型数据库是指不同于传统关系型数据库的数据存储系统,它不采用关系模型来组织和存储数据,常见的有键值存储、文档存储、列族存储、图数据库等类型。

  • 特点 :具有灵活的数据结构、高可扩展性、高性能读写等优点,适用于处理大规模、复杂多变的数据类型。

  • 示例 :MongoDB 是一种文档型非关系型数据库,它使用 JSON 格式的文档来存储数据,便于处理半结构化数据,如在社交媒体应用中存储用户发布的各种类型的内容(文字、图片、视频等)。

三、多表联查

1. 内联结(INNER JOIN)

  • 定义 :内联结是基于两个或多个表之间的指定条件进行连接,只返回满足连接条件的记录行。

  • 示例 :查询学生信息表和成绩表,获取成绩大于 80 分的学生姓名和对应成绩。

SELECT student.name, score.grade
FROM student
INNER JOIN score ON student.id = score.student_id
WHERE score.grade > 80;

2. 左联结(LEFT JOIN)

  • 定义 :左联结返回左表中的所有记录以及右表中满足连接条件的记录。如果右表中没有匹配的记录,则结果中右表的字段将为 NULL。

  • 示例 :查询所有学生的信息以及他们的成绩,即使某些学生没有成绩记录。

SELECT student.name, score.grade
FROM student
LEFT JOIN score ON student.id = score.student_id;

3. 右联结(RIGHT JOIN)

  • 定义 :右联结与左联结相反,返回右表中的所有记录以及左表中满足连接条件的记录。如果左表中没有匹配的记录,左表的字段将为 NULL。

  • 示例 :查询所有成绩记录以及对应的学生信息,即使某些成绩没有关联的学生记录。

SELECT student.name, score.grade
FROM student
RIGHT JOIN score ON student.id = score.student_id;

4. 外连接(OUTER JOIN)

  • 定义 :外连接包括左外连接、右外连接和全外连接(返回左右表中所有记录,匹配则显示对应字段,不匹配则为 NULL)。它是对内连接的扩展,用于获取更全面的数据视图。

  • 示例 :使用全外连接查询学生信息和成绩信息,无论是否有关联记录。

SELECT student.name, score.grade
FROM student
FULL OUTER JOIN score ON student.id = score.student_id;

5. 交叉连接(CROSS JOIN)

  • 定义 :交叉连接返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行组合。

  • 示例 :查询两个表,生成所有可能的部门与员工的组合(假设存在部门表和员工表)。

SELECT department.dept_name, employee.name
FROM department
CROSS JOIN employee;

6. 笛卡尔积

  • 定义 :笛卡尔积是数学中的概念,在数据库中指两个或多个表进行连接时,没有指定连接条件或者连接条件不正确,导致返回的结果集是参与连接的表的行数相乘的所有组合。

  • 问题 :通常情况下笛卡尔积会生成大量无意义的数据组合,会对查询性能和结果准确性产生负面影响,因此在实际开发中要谨慎处理,确保正确设置连接条件。

四、数据类型

1.VARCHAR 和 CHAR

数据类型特点使用场景
CHAR定长字符串,存储速度相对较快,因为其固定长度便于数据库进行快速定位和存储操作。适用于存储长度固定的数据,如身份证号码(18 位)、省市区代码等。
VARCHAR变长字符串,存储空间使用更灵活,根据实际数据长度动态分配存储空间。适用于存储长度不固定的数据,如姓名、地址、产品描述等。

五、聚合函数

1.COUNT使用的区别

函数形式作用与特点
COUNT(*)统计表中所有行的数量,包括 NULL 值行。它是最通用的统计方式,用于获取表中总行数。
COUNT(1)与 COUNT() 功能类似,都是统计行数。在某些数据库实现中,COUNT(1) 可能会比 COUNT() 稍微高效,因为数字类型的计算可能比其他类型更简单,但在大多数场景下两者的性能差异可以忽略不计。
COUNT(字段)统计指定字段非 NULL 值的行数。用于获取表中某个特定字段有实际值的记录数量,可用于数据分析中统计某个属性的有效数据量。

六、索引

1.什么是索引

  • 定义 :索引是数据库中用于提高数据查询速度的结构,它通过创建额外的数据结构来快速定位和访问表中的数据行。

  • 作用 :加快数据检索速度,减少磁盘 I/O 操作,提高数据库的整体性能。

2.使用索引的目的

  • 提高查询效率 :对于大型数据表,索引可以显著减少查询时间,特别是在需要频繁查询某些字段时。

  • 优化排序和分组操作 :索引可以辅助排序和分组操作,减少排序和分组过程中的数据比较和移动操作。

3.索引的分类

按照数据结构分类:

索引类型数据结构特点适用场景
B-Tree 索引基于平衡树结构,具有良好的查找、插入和删除性能。数据按顺序存储,支持范围查询和排序操作。适用于需要进行范围查询、排序操作或频繁插入删除的场景,如用户信息表中的姓名、年龄字段索引。
Hash 索引基于哈希表结构,通过哈希函数快速定位数据,具有极快的查找速度。但不支持范围查询和排序。适用于对等值查询性能要求极高的场景,如用户登录时的用户名或邮箱字段索引。
全文索引用于对文本数据进行索引,支持全文检索操作。能够快速定位包含特定关键词的文本数据,在搜索引擎、文档管理系统等场景中广泛应用。适用于需要对大量文本数据进行内容搜索的场景,如文章内容搜索、日志分析等。
空间索引专门用于地理空间数据的索引,能够高效地处理地理坐标、几何形状等空间数据的查询和分析。适用于地理信息系统(GIS)、位置服务等需要处理地理空间数据的应用场景。

按照逻辑结构分类:

索引类型特点
普通索引最基本的索引类型,不具有唯一性约束,用于提高查询效率。
唯一索引索引列的值必须唯一,用于确保数据的唯一性,同时提高查询速度。在插入或更新数据时,数据库会自动检查唯一性约束。

4.创建索引

  • 语法

    • 创建普通索引:CREATE INDEX 索引名 ON 表名 (列名);

    • 创建唯一索引:CREATE UNIQUE INDEX 索引名 ON 表名 (列名);

  • 示例 :为学生表的学号列创建唯一索引,确保学号的唯一性并提高查询速度。

CREATE UNIQUE INDEX idx_stu_no ON student (stu_no);

相关文章:

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键&#xff…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

day36-多路IO复用

一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

怎么让Comfyui导出的图像不包含工作流信息,

为了数据安全,让Comfyui导出的图像不包含工作流信息,导出的图像就不会拖到comfyui中加载出来工作流。 ComfyUI的目录下node.py 直接移除 pnginfo(推荐)​​ 在 save_images 方法中,​​删除或注释掉所有与 metadata …...

作为测试我们应该关注redis哪些方面

1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

Vite中定义@软链接

在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...