InnoDB如何引擎通过Next-Key Lock部分解决幻读

1. 幻读问题概述

幻读是数据库并发事务中最棘手的一类问题。它指在同一事务内,连续执行两次相同的查询语句,第二次查询所返回的结果集与第一次查询的结果集不同。具体表现为:新增了符合查询条件的行

示例场景

1
2
3
4
5
6
7
8
9
10
-- 事务A
BEGIN;
SELECT * FROM users WHERE age BETWEEN 20 AND 30;

-- 此时事务B插入了一条新记录
INSERT INTO users (name, age) VALUES ('NewUser', 25);

-- 事务A再次查询
SELECT * FROM users WHERE age BETWEEN 20 AND 30;
-- 发现多了一条记录,即"幻读"
阅读更多

SQL事务隔离级别详解

为什么需要事务隔离级别?

在并发环境下,多个事务同时操作数据库时会产生各种并发问题。如果不进行隔离控制,可能会导致数据的不一致性。主要会出现以下问题:

1. 脏读(Dirty Read)

  • 定义:一个事务读取到另一个事务未提交的数据
  • 危害:可能导致业务决策建立在不可靠的数据之上
阅读更多

MySQL 索引二

索引介绍

索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。

索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。

索引底层数据结构存在很多种类型,常见的索引结构有: B 树, B+树 和 Hash、红黑树。在 MySQL 中,无论是 Innodb 还是 MyIsam,都使用了 B+树作为索引结构。

索引的优缺点

优点

阅读更多

CentOS 8安装最新Oracle19c数据库

介绍

目前 Oracle 官方推荐安装19c 的 linux 版本为Linux 7,不过强制安装到CentOS 8上,还是可以用的,接下来就来介绍怎么安装。

安装 Oracle Database 19c

安装Oracle Database 相关依赖

推荐先安装Oracle官方yum仓库,主要是为了通过yum安装 oracle-database-preinstall-19c.x86_64,来帮助我们完成 Oracle Databse 19c 的依赖检查安装。

阅读更多

MySQL通过yum源安装最新版本教程

介绍

截至目前,MYSQL最新的版本为4月23号官方发布的8.0.20版本,本文主要讲解CentOS 8 如何通过yum源安装 最新mysql-community-server-8.0.20版本。

安装官方yum源

官方仓库下载yum源安装包

进入MySQL官方仓库^1, 在首页,最近的新版本仓库源安装包都会在这里,如果你对自己的系统了解,你可以直接找到自己Linux平台对应的官方源安装包直接安装。MySQL官方分别管理了yum源和apt源,进入里面,你就可以看到各个MySQL版本的安装包了。我的Linux为CentOS 8.1, arch为 x86_64,进到对应目录 https://repo.mysql.com/yum/mysql-8.0-community/el/8/x86_64/,在这里,看到各种MySQL相关的安装包,其中的mysql80-community-release字样的就是官方yum源的安装包,在首页也能找到,因为是CentOS8系统,直接首页浏览器搜索el8字样,就能看到一样的yum源安装包,最新的是mysql80。

阅读更多

Linux 安装并配置最新的MongoDB

一、前言

目前的稳定版本 是4.2.X,截止至20年4月初的最新是4.2.5,也推荐安装此版本,也可以尝鲜,安装4.3.Xunstable版本。目前最新的是4.3.5

本文主要讲解 CentOS 8 如何安装配置 MongoDB 4.2.5。

二、下载方式

阅读更多

数据库系统原理

一、事务

概念

事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交一个事务,也可以使用 Rollback 进行回滚。

image-20191207222237925

ACID

1. 原子性(Atomicity)

事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。

阅读更多

MySQL 查询缓存

MySQL 查询缓存介绍

MySQL 体系架构如下图所示:

为了提高完全相同的查询语句的响应速度,MySQL Server 会对查询语句进行 Hash 计算得到一个 Hash 值。MySQL Server 不会对 SQL 做任何处理,SQL 必须完全一致 Hash 值才会一样。得到 Hash 值之后,通过该 Hash 值到查询缓存中匹配该查询的结果。

阅读更多

MySQL 锁相关面试题

MySQL锁相关面试题

为什么需要加锁

如果有多个并发请求存取数据,在数据就可能会产生多个事务同时操作同一行数据。如果并发操作不加控制,不加锁的话,就可能写入了不正确的数据,或者导致读取了不正确的数据,破坏了数据的一致性。因此需要考虑加锁。

表级锁和行级锁有什么区别?

MyISAM 仅仅支持表级锁,一锁就锁整张表,这在并发写的情况下性非常差。

阅读更多

MySQL 执行计划分析

什么是执行计划?

执行计划 是指一条 SQL 语句在经过 MySQL 查询优化器 的优化会后,具体的执行方式。

执行计划通常用于 SQL 性能分析、优化等场景。通过 EXPLAIN 的结果,可以了解到如数据表的查询顺序、数据查询操作的操作类型、哪些索引可以被命中、哪些索引实际会命中、每个数据表有多少行记录被查询等信息。

如何获取执行计划?

MySQL 为我们提供了 EXPLAIN 命令,来获取执行计划的相关信息。

阅读更多