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

MySQL 知识小结(一)

一、my.cnf配置详解

我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们MySQL数据库,不过这也是企业中常常使用的,我们通常会将这些配置文件自定义好之后,然后就进行编译。

当完成了MySQL安装之后,我们会生成一个My.cnf类型文件,那么这些数据目录又是如何分配的呢?又是如何存放的呢?带着这个问题,咱们来分析下配置。

  • basedir:即显示了分配的MySQL的安装目录,它存放在/usr/local/mysql目录下
  • datadir :这里面指定了数据库的存储目录,数据库的表,索引等机制都存储于该目录下,当我们创建一个新的数据表,相关的数据库文件就会被写入到/usr/local/mysql /data目录以及它的子目录下
  • socket=/tmp/mysql.socket,这个文件又叫做一个套接字文件,这个文件能快速帮助本地客户端快速的与MySQL服务端建立连接,进行交互,而无需通过网路层协议
  • log-error文件中存储了MySQL服务器错误日志文件的径,但MySQL在运行期间遇到了报错,警告或其他重要事件时,那么相关信息会记录到这个日志文件中
  • pid-file:存放着MYSQL服l务进程的进程ID文件的路径。用户可以通过这个文件中的PID来管理MySQL服务进程,启动或停止MySQl服务

二、MySQL引擎

 定义:也叫存储引擎,是MySQL处理数据存储的核心组件,它指定了数据库如何进行存储,如何检索数据相关特性。

拿我们生活中的例子来说吧,一个图书管理系统采用的是InnoDB结构,当读者借阅图书时,需要进行图书借阅情况的记录,同一本书可能被多人预约,但是为了保准其数据的准确性,,避免超借,此时就需要保证借书和还书数据的一致性(借书时库存减少,还书时库存增加)

那么最终这个管理系统究竟又是如何来确保借书情况的一致性,这里我们就不得不探讨一下MSQL存储引擎的原理了

1.数据存储与组织

Innodb:即将数据和和索引的情况存储在聚集索引中,表数据和主键索引紧密关联在一起形成了一个表(id,name,gender)等字段,InnoDB会根据id的顺序进行数据存储在磁盘页中,这种存储方式基于主键进行查询,具有很高续写性,因为字段中都引入了主键索引,就可以快速的定位到相应的数据行。

采用MyISAM形式进行存储,将数据文件和索引文件分开存储,它有三个文件,.frm文件存储表的结构,.MYD文件存储数据(图书信息查询,适合读多写少的场景),从而根据条件进行查询,.MYI文件存储索引,也就是某个字段建立的索引会存储在.MYD文件中,这个件使得MyISAM在一些只读或读多写少场景下表现更好。

MySQL数据库在服务启动前,需要选择启动引擎,就好比一辆小车,性能好的发动机往往会提升其小车的性能,从而使得启动、运行更加高效,同样,MySQL它也有着类似于发动机引擎。

MySQL引擎包括ISAM,MyISAM,InnoDB,MEMORY等,其中MyISAM,InnoDB使用最为广泛.

引擎特性  MyISAM(MySQL 5.0之前默认引擎)InnoDB
集群索引不支持支持
硬盘空间使用低        
外键支持不支持支持
事务安全不支持支持
锁机制表锁行锁

2.事务性存储

InnoDB属于事务性数据库的引擎,支持ACID事务

ACID包括:原子性(Automaticity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。其中一个支持事务的数据库,必须具备其四个特性,否则无法再执行数据时,确保其数据额的正确性

一致性(Consistency)

事务在开始前和结束后,事物的完整性约束都没有被破坏,代表着底层数据的完整性

原子性(Automiticity)

事务是一个不可分割的工作单元,事务的操作要么同时执行,要么同时不执行

隔离性(Isolation)

多个事务并发访问时,事务之间的隔离机制是相互隔离的,一个事务不该影响到其他事务的运行效果,这意味着事务必须在不干扰其他进程或事务的前提下独立运行

事务并发性隔离机制存在问题(脏读、幻读、不可重复读)

持久性(Durability)事务一旦提交,即使系统崩溃,数据也不会丢失

该事务对数据库的更改是持久保存在数据库中的,一旦数据提交,将持久保存在数据库中

InnoDB通过事务日志(read_log)来保证其持久性

三、MySQL基础用法

建库建表语句

建库语句

-- MySQL启动命令:
mysql -u root -p-- 查看用户和主机: 
select user();-- 显示所有数据: 
show databases;-- 创建新数据库
create database test_db;-- 删除数据库
drop database test_db;-- 使用数据库
use test_db;-- 显示当前使用数据库
select database();-- 显示当前数据库所有表
show tables;

建表语句

设计如下情况的数据表结构:

-- ROLE表的创建
CREATE TABLE ROLE (id INT AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(50) NOT NULL,LEVEL INT,SEX CHAR(1),GOLD DECIMAL(10,2),   Birth_data DATE
);-- HAT表的创建
CREATE TABLE HAT (HAT_id INT AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(50) NOT NULL,LEVEL INT,Loss_status varchar(1),gain_time time
);

关于数据库表内容的增、删、改、查分析

插入数据
-- 单条数据插入
INSERT INTO ROLE(NAME,LEVEL,SEX,GOLD,Birth_data)VALUES('z3',3,'男','6666.88','2025-06-09');-- 多条数据插入
INSERT INTO HAT(NAME,LEVEL,Loss_status,gain_time)VALUES('一级头盔',1,0,NOW()),
('三级头盔',3,0,NOW()+1);
查询数据
-- 查看表数据
select * from ROLE;
select * from HAT;-- 条件查询(查询姓名为z3任务的详细情况)
select * from ROLE where name='z3';-- 范围区间查询select * from  ROLE where gold between 6000 and 10000;-- 分页查询
-- 1.限制返回0-5条记录
select * from ROLE limit 5 OFFSET 0;
-- 2.限制返回6-10条记录
select * from ROLE limit 5 OFFSET 5;-- 模糊查询(模糊匹配),查询名字中包含z的数据和含有z匹配字段
select * from ROLE where name like '%z%'; 
select * from ROLE where name like 'z_';-- 聚合函数使用
-- count()、avg()、MAX()、MIN(),结合having和group by分组使用
-- 按人物的等级进行分组,筛选并过滤出平均分大于6666的人
select avg(gold) as avg_gold from role group by level having avg_gold>=6666 
修改数据
-- 更新单个字段
update ROLE set GOLD=99999.99 where name='z3';-- 更新多个字段
update ROLE  set gold=33333.33,level=8 where name='z3';
删除数据
-- 删除特定数据
delete from ROLE where name='z3';-- 删除所有数据
delete from ROLE;-- 假如误删表的数据了,如何恢复?
-- 1.停止所有写操作
flush tables with read lock;
-- 2.确认删除范围
show binlog events; -- 查询最近操作
-- mysql -uroot -p test_db<backuofile.sql

关于数据库表结构的增删改

-- 增加表中列的相关信息
alter table ROLE add column message varchar(100);-- 修改表中列的相关信息
alter table ROLE modify column gold decimal(12,3);-- 删除表中列的相关信息
alter table ROLE drop column message;-- 重命名表
rename table ROLE to user;

三、多表关系构建

就拿员工、部门、项目表三张表表示其表关系如下图所示

数据表结构导入

这里以员工表、部门表、项目表三者为关系来构建

-- 一对多关系的构建(即员工和部门间的关系)-- 创建部门表
create employee(dept_id INT PRIMARY KEY AUTO_INCREMENT, -- 部门ID,设置主键自增属性dept_name varchar(50) NOT NULL, -- 部门名称location varchar(100), -- 位置budget decimal(15,2),  -- 预算constraint uk_dept unique (dept_name)    -- 取一个列名并添加唯一约束
)ENGINE=INNODB    -- 符合INNODB存储引擎,支持事务ACID特性-- 创建员工表CREATE TABLE employees( emp_id INT PRIMARY KEY AUTO_INCREMENT, -- 员工编号emp_name VARCHAR(50) NOT NULL, -- 员工姓名email VARCHAR(100) UNIQUE, -- 员工邮箱hire_date DATE NOT NULL, -- 入职时间salary DECIMAL(10,2), -- 工资dept_id INT, -- 外键字段,关联部门表CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) REFERENCES departments(dept_id) -- 创建表外键的关系ON DELETE SET NULL -- 当部门被删除的时候,员工dept_id 设为NULLON UPDATE CASCADE -- 当部门dept_id更新的时候,同步更新
)ENGINE=INNODB; -- 创建项目表
CREATE TABLE projects(project_id INT AUTO_INCREMENT PRIMARY KEY,project_name VARCHAR(100) NOT NULL,start_date DATE,end_date DATE,budget DECIMAL(15,2)
)ENGINE=INNODB;-- 创建关联表
CREATE TABLE employee_projects(emp_id INT,project_id INT,join_date DATE NOT NULL,ROLEVARCHAR(50),PRIMARY KEY (emp_id,project_id), -- 复合主键CONSTRAINT fk_ep_emp FOREIGN KEY (emp_id)REFERENCES employees(emp_id)ON DELETE CASCADE,  -- 员工删除时候删除关联记录CONSTRAINT fk_ep_project FOREIGN KEY(project_id)REFERENCES projects(project_id)ON DELETE CASCADE -- 项目删除的时候删除关联记录
)ENGINE=INNODB;
载入数据
INSERT INTO departments (dept_name,location,budget) VALUES
('研发部','北京总部A座3层',5000000.00),
('市场部','北京总部A座2层',3000000.00),
('人力资源部','北京总部A座1层',1000000.00);
SELECT*FROM departments;-- 插入员工数据
INSERT INTO employees(emp_name,email,hire_date,salary,dept_id) VALUES
('张三','zhangsan@163.com','2020-01-15',15000.00,1),
('李四','lisi@163.com','2019-05-20',18000.00,1),
('王五','wangwu@163.com','2021-03-10',12000.00,2);
SELECT*FROM employees;-- 插入项目数据
INSERT INTO projects(project_name,start_date,end_date,budget) VALUES
('新零售平台开发','2023-01-01','2023-12-31',2000000.00),
('年度市场推广','2023-03-01','2023-11-30',50000.00);
SELECT*FROM projects;-- 建立多对多关联
INSERT INTO employee_projects(emp_id,project_id,join_date,ROLE) VALUES
(1,1,'2023-01-01','后端开发'),
(2,1,'2023-01-01','前端开发'),
(3,2,'2023-03-01','市场策划');
SELECT*FROM employee_projects;
查询练习
-- 查询某部门所有员工
select e.emp_name,e.email,e.salary from employee e join department d on e.dept_id=d.dept_id  
where d.dept_name='研发部'-- 查询员工参与的所有项目
SELECT p.project_name,p.start_date,p.end_date,ep.role
FROM employee_projects ep
JOIN projects p ON ep.project_id=p.project_id
JOIN employees e ON ep.emp_id=e.emp_id
WHERE e.emp_name='张三';-- 查询某项目的所有参与者以及其部门
SELECT e.emp_name,d.dept_name,ep.role
FROM employee_projects ep
JOIN employees e ON ep.emp_id=e.emp_id
LEFT JOIN departments d ON e.dept_id=d.dept_id
JOIN projects p ON ep.project_id=p.project_id
WHERE p.project_name='新零售平台开发';

相关文章:

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

【从零学习JVM|第三篇】类的生命周期(高频面试题)

前言&#xff1a; 在Java编程中&#xff0c;类的生命周期是指类从被加载到内存中开始&#xff0c;到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期&#xff0c;让读者对此有深刻印象。 目录 ​…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Java求职者面试指南:计算机基础与源码原理深度解析

Java求职者面试指南&#xff1a;计算机基础与源码原理深度解析 第一轮提问&#xff1a;基础概念问题 1. 请解释什么是进程和线程的区别&#xff1f; 面试官&#xff1a;进程是程序的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff1b;而线程是进程中的…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

push [特殊字符] present

push &#x1f19a; present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中&#xff0c;push 和 present 是两种不同的视图控制器切换方式&#xff0c;它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...