11 篇文章 最后更新:2025年6月6日
MySQL数据库

MySQL安装和配置:MySQL

SQL:Structured Query Language(结构化查询语言),是用来操作关系型数据库的一门语言。

SQL是一个关系型数据库的通用操作语言,也成为标准SQL,也叫SQL-92。

==Create, Read, Update, and Delete 通常称为CRUD操作==

::: details 几种常见的SQL语句类型:

  1. 数据定义语言 (Data Definition Language, DDL)

    • 用于创建、修改或删除数据库对象(如表、索引、视图等)。
    • 常见语句
      • CREATE:创建新的数据库对象。
      • ALTER:修改现有的数据库对象。
      • DROP:删除数据库对象。
    • 示例
      sql
      CREATE TABLE Customers (
          CustomerID int,
          Name varchar(255),
          Address varchar(255)
      );
  2. 数据操纵语言 (Data Manipulation Language, DML)

    • 用于插入、更新、删除数据库中的数据。
    • 常见语句
      • INSERT:向表中插入新记录。
      • UPDATE:修改现有记录的数据。
      • DELETE:从表中删除记录。
    • 示例
      sql
      INSERT INTO Customers (CustomerID, Name, Address)
      VALUES (1, 'John Doe', 'High St, 123');
  3. 数据查询语言 (Data Query Language, DQL)

阅读更多 »
MySQL体系架构

MySQL体系架构

MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。

  • Connectors:与MySQL服务器建立连接。目前几乎支持所有主流的服务端编程技术,例如常见的 Java、C、Python、.NET等,它们通过各自API技术与MySQL建立连接

  • MySQL Server:服务层是MySQL的核心,主要包含系统管理和控制工具、连接池、SQL接口、解析器、查询优化器和缓存六个部分。

  • Pluggable Storage Engines:存储引擎负责MySQL中数据的存储与提取,与底层系统文件进行交互。MySQL存储引擎是插件式的,服务器中的查询执行引擎通过接口与存储引擎进行通信,接口屏蔽了不同存储引擎之间的差异 。现在有很多种存储引擎,各有各的特点,最常见的是MyISAM和InnoDB。在绝大多数情况下,推荐使用InnoDB

  • File System:该层负责将数据库的数据和日志存储在文件系统之上,并完成与存储引擎的交互,是文件的物理存储层。主要包含日志文件,数据文件,配置文件,pid 文件,socket 文件等。

MySQL Server

  • 连接池(Connection Pool):负责存储和管理客户端与数据库的连接。

  • 系统管理和控制工具(Management Services & Utilities):如备份恢复、安全管理、集群管理等

  • SQL接口(SQL Interface):用于接受客户端发送的各种SQL命令,并且返回用户需要查询的结果。比如DML、DDL、存储过程、视图、触发器等。

  • 解析器(Parser):负责将请求的SQL解析生成一个"解析树"。然后根据一些MySQL规则进一步检查解析树是否合法。

  • 查询优化器(Optimizer):当“解析树”通过解析器语法检查后,将交由优化器将其转化成执行计划,然后与存储引擎交互。

  • 缓存(Cache&Buffer): 缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,权限缓存,引擎缓存等。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。

File System

  • pid 文件: pid 文件是 mysqld 应用程序在 Unix/Linux 环境下的一个进程文件,和许多其他 Unix/Linux 服务端程序一样,它存放着自己的进程 id

  • socket 文件: socket 文件也是在 Unix/Linux 环境下才有的,用户在 Unix/Linux 环境下客户端连接可以不通过TCP/IP 网络而直接使用 Unix Socket 来连接 MySQL。

  • 配置文件: 用于存放MySQL所有的配置信息文件,比如my.cnf、my.ini等。

  • 数据文件

    • db.opt 文件:记录这个库的默认使用的字符集和校验规则。
    • frm 文件:存储与表相关的元数据(meta)信息,包括表结构的定义信息等,每一张表都会有一个frm 文件。
    • MYD 文件:MyISAM 存储引擎专用,存放 MyISAM 表的数据(data),每一张表都会有一个.MYD 文件。
    • MYI 文件:MyISAM 存储引擎专用,存放 MyISAM 表的索引相关信息,每一张 MyISAM 表对应一个 .MYI 文件。
    • ibd文件和 IBDATA 文件:存放 InnoDB 的数据文件(包括索引)。InnoDB 存储引擎有两种表空间方式:独享表空间和共享表空间。独享表空间使用 .ibd 文件来存放数据,且每一张InnoDB 表对应一个 .ibd 文件。共享表空间使用 .ibdata 文件,所有表共同使用一个(或多个,自行配置).ibdata 文件。
    • ibdata1 文件:系统表空间数据文件,存储表元数据、Undo日志等 。
    • ib_logfile0ib_logfile1 文件:Redo log 日志文件。
  • 日志文件:二进制日志(Binary Log)、慢查询日志(Slow query log)、通用查询日志(General query log)和错误日志(Error log)等。

阅读更多 »
事务与锁机制

MySQL Transaction

事务(Transaction):是由一系列对数据库中数据进⾏访问(查询)与更新(增删改)的操作所组成的⼀个程序执行逻辑单元。这些操作,要么都成功,要么都不成功。

SQL
-- 事务相关命令:
begin;                -- 开始,还可以使用下列语法:
start transaction; 

commit;               -- 提交:使得当前的修改确认

rollback;             -- 回滚:使得当前的修改被放弃

事务的ACID特性

事务具有四个重要特征:原子性(Atomicity),一致性(Consistency),隔离性(Isolation),持久性(Durability)。简称ACID特性

索引及优化

SQL调优理论基础

索引数据结构

数据库索引是提高数据库查询性能的关键技术之一。索引类似于书籍的目录,通过索引可以快速定位到所需的数据,而不需要扫描整个表。

::: details 数据库索引的优缺点

索引的优点

  1. 提高查询速度:通过索引,数据库引擎可以快速定位到所需的数据,而不需要扫描整个表。
  2. 提高排序和分组效率:索引可以加速排序和分组操作。
  3. 唯一性约束:唯一索引可以确保数据的唯一性,防止重复数据的插入。

索引的缺点

  1. 增加存储空间:索引需要额外的存储空间,尤其是大型表和多列索引。
  2. 降低写操作性能:插入、更新和删除操作需要维护索引,增加了这些操作的开销。
  3. 复杂性:过多的索引会使数据库设计和维护变得复杂。 :::

为什么索引就更快呢? 这就要探究索引使用的数据结构了

  • 在数据库中B+树的高度一般都在2~4层,也就是说查找某一行记录时最多只需要2到4次IO
  • B+树索引的主要特点在于:
    • ==非叶子节点只存储关键字和子节点指针==:非叶子节点用于引导查找,存储关键字和指向子节点的指针,但不存储数据记录。
    • ==所有叶子节点包含关键字和数据指针==:在 B+树中,所有的数据记录都存储在叶子节点中,而非叶子节点只存储关键字和指向子节点的指针。
    • ==所有叶子节点通过指针链接在一起==:叶子节点之间通过指针链接,形成一个双向链表,便于范围查询。

B+树索引

B+树(B+ Tree)是一种广泛应用于数据库和文件系统中的数据结构,特别适合于磁盘存储和检索大量数据。B+树的设计目标是减少磁盘 I/O 操作次数,从而提高数据检索的效率。B+树的特点:

  1. 高度平衡:B+树是高度平衡的树,所有叶子节点都在同一层,保证了查找、插入和删除操作的时间复杂度为 O(log n)
  2. 高效的空间利用率:每个节点可以存储多个关键字和指针,减少了磁盘 I/O 操作次数。
  3. 支持范围查询:由于叶子节点通过指针链接在一起,B+树非常适合进行范围查询。
  4. 数据集中存储:所有数据记录都存储在叶子节点中,非叶子节点只用于引导查找,提高了查找效率。

Mybatis

Mybatis-plus官网:https://baomidou.com/

一 mybatis document

mybatis – MyBatis 3 官方文档:https://mybatis.org/mybatis-3/index.html

MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings.


Mybatis是一个优秀的持久层框架,又叫做 ORM框架 (半自动化、轻量级的ORM框架)。

ORM:Object Relationship Mapping(对象关系映射)。

java

Mybatis其实就是一个可以帮助我们把对象映射为关系型数据库中的记录把关系型数据库中的记录映射为对象的这么一个持久层框架

持久层持久层是指和数据库打交道的这一层

Mybatis其实就是一个可以帮助我们自定义SQL语句去操作数据库对数据库进行增删改查的这么一个框架
简化我们对于数据库的操作简化JDBC的流程
    

java
/* 为什么使用Mybatis?

- 对比JDBC
  - 原生的JDBC使用流程更复杂操作繁琐
  - SQL语句和代码严重耦合存在硬编码
  - 结果集解析不智能需要手动解析
  
- 对比DBUtils
  - SQL语句和代码严重耦合存在硬编码
  - 结果集解析的时候其实还是需要我们传入不同的ResultSetHandler不够强大
  - 对于连接查询的情况是不太能够支持的
  

1. Getting started

To use MyBatis you just need to include the mybatis-x.x.x.jar file in the classpath.

阅读更多 »
tk-mybatis

一 配置tk-mybatis环境

Github:https://github.com/abel533/Mapper

1. 配置mybatis环境

tk-mybatis是基于mybatis实现的,所以需要先配置好mybatis的环境和mysql驱动

xml
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

配置:数据源与mapper映射文件位置

yaml
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/tk_mybatis?serverTimezone=UTC&characterEncoding=utf-8

mybatis:
  mapper-locations: classpath:cn/itdrizzle/mapper/*Mapper.xml
  type-aliases-package: cn.itdrizzle.pojo

2. tk-mybatis集成

xml

<dependency>
  <groupId>tk.mybatis</groupId>
  <artifactId>mapper-spring-boot-starter</artifactId>
  <version>2.1.5</version>
</dependency>

最新版本号如上所示,你也可以从下面地址查看:

阅读更多 »
代码生成

一 MyBatis-Generator

MyBatis Generator,简称MBG

官网:http://mybatis.org/generator/index.html

中文网:http://www.mybatis.cn/archives/885.html

1. Introduction

MyBatis Generator 生成的文件包含三类:

(1)Model实体文件,一个数据库表对应生成一个 Model 实体; (2)Mapper接口文件,数据数操作方法都在此接口中定义; (3)Mapper XML配置文件

2. Quick Start

引入相关依赖

mybatis-generator-core

mysql-connector-java

配置generatorConfig.xml

Running Generator

Generator → main方法 → 直接运行

能够加载到配置文件即可

相对路径是相对于Working Directory的

3. Tasks After Running

二 XML Configuration

1. 文件结构简介

2. 去除统一前缀

Mybatis generator在1.3.6中增加新的属性domainObjectRenamingRule可以去除统一的前缀

xml

<table tableName="dc%">

	<generatedKey column="id" sqlStatement="MySql" identity="true" />
	<domainObjectRenamingRule searchString="^Dc" replaceString="" />
	<ignoreColumn column="FRED" />
</table>

**注意:**searchString在这里要写转换为Java对象后的开头名称

阅读更多 »
Redis数据缓存

Redis安装与配置

Redis的安装

通过redis官网下载上传至服务器,或通过wget直接下载

Redis官网:https://redis.io/

AnotherRedisDesktopManager:Gitee下载地址

shell

# 下载解压

wget http://download.redis.io/releases/redis-6.2.6.tar.gz

tar -zxvf redis-6.2.6.tar.gz


# 安装  (Ubuntu下最好在国外源下安装 gcc ,否则可能出错)

sudo apt-get install gcc         # 需要先安装编译环境 ( centos: yum install gcc-c++  )

sudo chmod -R 777 redis-6.2.6/   # ubuntu可能存在权限问题,先赋予权限再安装

cd redis-6.2.6/                  # 进入redis目录进行安装

make && make install

不报错的话就已经在 /usr/local/bin/ 目录下生成了 redis-server 执行文件

阅读更多 »
Java操作Redis

1. Jedis

引入依赖:

Maven Repository: redis.clients » jedis :https://mvnrepository.com/artifact/redis.clients/jedis

xml

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>

java

public class SortedSetDemo {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.5.150");
        jedis.auth("itdrizzle");

        String ssk = "sorted_set_key";

        jedis.del(ssk);

        Map<String, Double> map = new HashMap<>();
        map.put("user1", 88.0);
        map.put("user2", 56.0);
        map.put("user3", 75.0);
        map.put("user4", 85.0);
        map.put("user5", 68.0);

        jedis.zadd(ssk, map);
        jedis.expire(ssk, 120);

        System.out.println("jedis.zrange(ssk, 0, -1) = " + jedis.zrange(ssk, 0, -1));
        System.out.println("jedis.zrangeWithScores(ssk, 0, 2) = " + jedis.zrangeWithScores(ssk, 0, 2));

        System.out.println("jedis.zrank(ssk, \"user2\") = " + jedis.zrank(ssk, "user2"));
        System.out.println("jedis.zscore(ssk, \"user2\") = " + jedis.zscore(ssk, "user2"));

        System.out.println("jedis.zcard(ssk) = " + jedis.zcard(ssk));
        System.out.println("jedis.zcount(ssk, 60, 80) = " + jedis.zcount(ssk, 60, 80));

        jedis.close();
    }
}

2. Lettuce

Lettuce 是另一个流行的 Redis Java 客户端,支持同步、异步和响应式编程模型。

阅读更多 »