MySQL

5 篇文章
数据库的脏读、不可重复读和幻读

数据库的脏读、不可重复读和幻读

文章主要介绍了数据库事务中的三种常见问题及其对应的隔离级别: 1. **脏读(Dirty Read)**:事务A修改数据但未提交,事务B读取了这些未提交的数据,随后事务A回滚,导致事务B读取到无效数据。 2. **不可重复读(Non-repeatable Read)**:在同一个事务中,事务A两次读取同一行数据,结果不一致,因为事务B在两次读取之间修改了数据并提交。 3. **幻读(Phantom Read)**:事务A两次查询的行数不一致,因为事务B在两次查询之间插入了新的数据并提交。 **隔离级别及解决方案**: - **读未提交**:三种问题都可能发生。 - **读已提交**:解决脏读问题。 - **可重复读**(MySQL默认):解决脏读和不可重复读问题。 - **串行化**:完全解决所有问题,但性能最差。

为什么 MySQL 选择使用 B+ 树作为索引结构?

为什么 MySQL 选择使用 B+ 树作为索引结构?

数据库索引的核心需求是加速数据查找,同时减少磁盘 I/O 次数和支持范围查询、排序等常见场景。B+ 树作为数据库索引的核心结构,因其多路平衡查找树的特性,能够有效减少磁盘 I/O,支持高效的范围查询和排序,且查询效率稳定。相比其他数据结构(如哈希表、红黑树、B 树),B+ 树在磁盘 I/O 次数、范围查询支持、空间利用率等方面具有明显优势。 B+ 树的主要特性包括:1)层级低,磁盘 I/O 少;2)数据集中在叶子节点,查询效率稳定;3)叶子节点有序且通过双向链表连接,完美支持范围查询、排序和分页;4)空间利用率高,进一步降低树的高度。 MySQL 的 InnoDB 存储引擎对 B+ 树做了进一步优化,如聚簇索引、页缓存和自适应哈希索引,以更好地适应实际业务场景。总的来说,B+ 树因其低 I/O 成本、场景适配性强、效率稳定和空间利用率高,成为关系型数据库索引的“事实标准”。

Gitea 迁移(环境:Docker + MySQL)

Gitea 迁移(环境:Docker + MySQL)

本文详细介绍了如何备份和恢复Gitea服务的过程,分为五个步骤: 1. **备份Gitea**:通过Docker进入Gitea终端,切换到git账号,使用`gitea dump`命令备份到指定目录,并确认备份成功。 2. **上传备份文件**:将生成的备份文件(如`gitea-dump-<时间戳>.zip`)上传到另一台Gitea主机,同时将数据库备份文件(如`gitea-db.sql`)上传到MySQL主机。 3. **恢复MySQL备份**:在MySQL终端中创建gitea数据库,并使用`mysql --default-character-set=utf8mb4`命令恢复备份。 4. **恢复Gitea备份**:解压备份文件,替换配置文件和仓库,调整文件权限,修改数据库连接方式(如需),并重新生成Git钩子。 5. **重启Gitea容器**:完成所有恢复步骤后,重启Gitea容器以确保所有更改生效。 整个过程涵盖了从备份到恢复的详细操作,适用于需要迁移或恢复Gitea服务的场景。

Java面试-18:介绍一下MySQL有那些索引类型?

Java面试-18:介绍一下MySQL有那些索引类型?

本文详细介绍了数据库中常见的六种索引类型及其特性: 1. **主键索引(PRIMARY KEY)**:最特殊、最重要的索引,每张表只能有一个,具有唯一性和非空性,用于唯一标识一行数据,查询速度最快。 2. **唯一索引(UNIQUE)**:类似于主键索引,但允许字段为NULL,保证列值绝对不重复,适用于手机号、身份证号等字段。 3. **普通索引(INDEX)**:最常用、最简单的索引,仅用于加速查询,无唯一或非空要求。 4. **复合索引(联合索引)**:一次为多个字段创建索引,遵循最左前缀原则,适用于经常一起查询的多个字段。 5. **全文索引(FULLTEXT)**:专门用于关键词搜索,比`like`查询快得多,适用于文章内容、商品描述等搜索场景。 6. **空间索引(SPATIAL)**:用于地理位置、坐标等数据,常见于地图范围查询,普通开发较少使用。

MySQL 部署(Docker 方式)

MySQL 部署(Docker 方式)

MySQL是一款开源的关系型数据库管理系统,广泛应用于全球各类应用中,支持结构化数据的存储、查询和修改。它具有高性能、跨平台、多语言支持等特点,能够处理海量数据,并通过索引和缓存机制提升查询效率。MySQL支持事务和数据安全,提供ACID特性,确保数据操作的可靠性和安全性。 文章介绍了如何使用Docker Compose部署MySQL。首先,通过编写Docker Compose配置文件,定义MySQL容器的基本设置,包括镜像版本、环境变量、端口映射、数据持久化等。随后,通过命令构建并启动MySQL容器,确保数据库服务能够稳定运行。整个部署过程简化了MySQL的安装和配置,使其能够快速集成到开发环境中。