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

MySQL 中的事务和存储引擎

目录

事务的 ACID 特性

MySQL 的四种隔离机制和问题

MySQL 的四种隔离机制:

MySQL 的存储引擎

InnoDB 存储引擎

MyISAM 存储引擎

Memory 存储引擎

通过 ALTER TABLE 语句更改存储引擎

在创建表时指定存储引擎

通过修改配置文件设置默认存储引擎


在数据库系统中,事务是指一组操作被当作一个单元来执行,要么全部成功提交,要么全部失败回滚。而存储引擎则是数据库管理系统中负责数据存储和管理的核心组件。在 MySQL 中,了解事务的 ACID 特性、隔离级别以及不同的存储引擎对于设计和优化数据库系统非常重要。

事务的 ACID 特性

在 MySQL 中,事务遵循 ACID 特性,确保了数据的一致性和完整性:

  • 原子性:事务中的所有操作要么全部执行成功,要么全部失败回滚,不会出现部分执行的情况。
  • 一致性:事务将数据库从一种一致状态转换为另一种一致状态,即使在事务执行过程中出现错误也会回滚到初始状态。
  • 隔离性:事务的执行不受其他事务的影响,每个事务看到的数据是一致的,防止了数据的交叉干扰。
  • 持久性:一旦事务提交,对数据的修改将永久保存在数据库中,即使发生系统故障也不会丢失。

MySQL 的四种隔离机制和问题

MySQL 提供了四种事务隔离级别,分别是:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。每种隔离级别都有不同的特点,也会导致不同的问题:

  • 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据。
  • 不可重复读(Non-Repeatable Read):一个事务在读取同一数据行时,由于其他事务的修改导致了多次读取结果不一致。
  • 幻读(Phantom Read):一个事务读取了另一个事务提交的新数据,导致前后两次查询的结果集不一致。
  • 丢失更新(Lost Update):两个事务同时读取同一数据行,并且都修改了这一行,但只有一个事务的修改生效了。

MySQL 的四种隔离机制:

  • 读未提交(Read Uncommitted):允许事务读取未提交的数据,可能出现脏读、不可重复读、幻读、丢失更新问题。
  • 读已提交(Read Committed):保证一个事务不会读取到另一个事务未提交的数据,解决了脏读问题,但仍可能出现不可重复读、幻读、丢失更新问题。
  • 可重复读(Repeatable Read):保证一个事务在执行过程中多次读取同一数据行的结果是一致的,解决了不可重复读问题,但仍可能出现幻读、丢失更新问题。
  • 串行化(Serializable):最高级别的隔离级别,完全解决了脏读、不可重复读、幻读、丢失更新问题,但性能较低。

MySQL 的存储引擎

MySQL 的存储引擎是指数据库管理系统底层的组件,负责数据的存储、索引和管理。不同的存储引擎具有不同的特点和功能,适用于不同的场景和需求。 MySQL 中常见的存储引擎,包括 InnoDB、MyISAM、Memory 等。

InnoDB 存储引擎

  • 特点

    • 支持事务(ACID):提供了事务的支持,可以实现数据的一致性和完整性。
    • 行级锁定:支持行级锁定,可以提高并发性能,减少锁冲突。
    • 外键约束:支持外键约束,保证数据的完整性。
    • 支持全文索引:可以对文本类型的数据进行全文搜索。
    • 自动崩溃恢复:具有自动崩溃恢复功能,可以在 MySQL 重启后自动恢复数据。
  • 优点

    • 适合大量写入和读取的应用:对于需要高并发读写、数据完整性要求高的应用非常适用。
    • 支持事务:可以实现数据的一致性,适合需要事务支持的应用。
    • 外键约束:对于有复杂关系的数据库设计,外键约束非常有用。
  • 缺点

    • 内存占用较大:相比于其他存储引擎,InnoDB 的内存占用较大。
    • 性能损失:由于支持事务和行级锁定,性能可能相对较低。
  • 适用场景

    • 需要事务支持和数据完整性的应用:如电子商务网站、金融系统等。
    • 高并发读写的应用:对于需要大量的并发读写操作的应用非常适用。
    • 复杂关系的数据库设计:对于需要建立复杂关系的数据库结构,外键约束非常有用。

MyISAM 存储引擎

  • 特点

    • 不支持事务:不提供事务的支持,对于简单的读取操作较为适用。
    • 表级锁定:锁定的粒度是整个表,不能实现行级锁定。
    • 全文索引:支持全文索引,可以对文本类型的数据进行全文搜索。
    • 性能较高:在读取操作上性能较高,适合读取频繁的应用。
  • 优点

    • 内存占用较小:相比于 InnoDB,MyISAM 的内存占用较小。
    • 性能较高:在读取操作上性能较高,适合读取频繁的应用。
  • 缺点

    • 不支持事务:对于需要事务支持的应用不适用。
    • 表级锁定:锁定的整个表,可能导致并发性能下降。
    • 不支持外键约束:对于需要外键约束的数据库设计不适用。
  • 适用场景

    • 只读的数据仓库:对于只读的数据仓库或者读取操作频繁的应用非常适用。
    • 日志、存档等:对于需要高性能的写入操作,但不需要事务和复杂查询的应用。
    • 简单的数据库设计:对于简单的数据库结构,不需要复杂关系和外键约束的应用。

Memory 存储引擎

  • 特点

    • 将表存储在内存中:数据存储在内存中,读写速度非常快。
    • 不支持事务和外键约束:不支持事务和外键约束,主要用于临时表、缓存等场景。
    • 表级锁定:锁定的粒度是整个表,不支持行级锁定。
  • 优点

    • 读写速度快:由于数据存储在内存中,读写速度非常快。
    • 适用于临时数据:对于临时数据、缓存等场景非常适用。
  • 缺点

    • 数据丢失:数据存储在内存中,MySQL 重启后数据丢失。
    • 不支持事务和外键约束:对于需要事务和外键约束的应用不适用。
    • 表级锁定:锁定的粒度是整个表,可能导致并发性能下降。
  • 适用场景

    • 临时数据和缓存:对于临时数据、缓存等场景非常适用。
    • 测试和开发环境:对于测试和开发环境中的临时数据存储非常方便。

通过 ALTER TABLE 语句更改存储引擎

假设 school 数据库中有一个表名为 class,我们想将其存储引擎从默认的 InnoDB 更改为MyISAM:

ALTER TABLE class ENGINE = MyISAM;

在创建表时指定存储引擎

假设要创建一个新的 class 表,并将存储引擎设置为 MyISAM:

CREATE TABLE class (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50)) ENGINE = MyISAM;

通过修改配置文件设置默认存储引擎

在 my.cnf中设置默认存储引擎:

[mysqld]
default_storage_engine = MyISAM

设置完成后,重启 MySQL 服务,新创建的表就会默认使用 MyISAM 存储引擎。已存在的表存储引擎不会被更改,在创建表时如果手动指定使用的存储引擎,则使用手动指定的存储引擎。

相关文章:

MySQL 中的事务和存储引擎

目录 事务的 ACID 特性 MySQL 的四种隔离机制和问题 MySQL 的四种隔离机制: MySQL 的存储引擎 InnoDB 存储引擎 MyISAM 存储引擎 Memory 存储引擎 通过 ALTER TABLE 语句更改存储引擎 在创建表时指定存储引擎 通过修改配置文件设置默认存储引擎 在数据库系…...

echarts多个折线图共用一个x轴和tooltip组件

实现效果 根据接口传来的数据&#xff0c;使用echarts绘制出&#xff0c;共用一个x轴的图表 功能&#xff1a;后端将所有数据传送过来&#xff0c;前端通过监听选中值来展示对应的图表数据 数据格式&#xff1a; 代码&#xff1a; <template><div><div clas…...

wireshark数据捕获实验简述

Wireshark是一款开源的网络协议分析工具&#xff0c;它可以用于捕获和分析网络数据包。是一款很受欢迎的“网络显微镜”。 实验拓扑图&#xff1a; 实验基础配置&#xff1a; 服务器&#xff1a; ip:172.16.1.88 mask:255.255.255.0 r1: sys sysname r1 undo info enable in…...

如何利用RunnerGo简化性能测试流程

在软件开发过程中&#xff0c;测试是一个重要的环节&#xff0c;需要投入大量时间和精力来确保应用程序或网站的质量和稳定性。但是&#xff0c;随着应用程序变得更加复杂和庞大&#xff0c;传统的测试工具在面对比较繁琐的项目时非常费时费力。这时&#xff0c;一些自动化测试…...

继承和深拷贝封装

继承和深拷贝封装 今日目标&#xff1a; 1.es5寄生组合式继承 2.es6类的继承 3.深拷贝函数封装 00-回顾 # 不同数据类型赋值时的区别&#xff1a; 基本数据类型&#xff0c;赋的就是值&#xff0c;相互之间不再有任何影响 引用数据类型&#xff0c;赋的是地址&#xff0c…...

《定时执行专家》:Nircmd 的超级搭档,解锁自动化新境界

目录 Nircmd 简介 《定时执行专家》与 Nircmd 的结合 示例&#xff1a; 自动清理电脑垃圾: 定时发送邮件: 定时关闭电脑: 《定时执行专家》的优势: 总结: 以下是一些其他使用示例&#xff1a; 立即下载《定时执行专家》&#xff1a; Nircmd 官方网站&#xff1a; 更…...

Android 封装的工具类

文章目录 日志封装类-MyLog线程封装类-LocalThreadPools自定义进度条-LoadProgressbar解压缩类-ZipUtils本地数据库类-MySQLiteHelper访问webservice封装-HttpUtilsToolbar封装类-MaterialToolbar网络请求框架-OkGo网络请求框架-OkHttp 日志封装类-MyLog 是对android log的封装…...

linux下线程分离属性

linux下线程分离属性 一、线程的属性---分离属性二、线程属性设置2.1 线程创建前设置分离属性2.2 线程创建后设置分离属性 一、线程的属性—分离属性 什么是分离属性&#xff1f; 首先分离属性是线程的一个属性&#xff0c;有了分离属性的线程&#xff0c;不需要别的线程去接合…...

Leetcode 208. 实现 Trie (前缀树)

心路历程&#xff1a; 一道题干进去了一个下午&#xff0c;单纯从解题角度可以直接用python的集合就很简单地解决&#xff08;不知道是不是因为python底层的set()类&#xff09;。后来从网上看到这道题应该从前缀树的角度去做&#xff0c;于是花了半个多小时基于字典做了前缀树…...

蓝桥杯练习题——健身大调查

在浏览器中预览 index.html 页面效果如下&#xff1a; 目标 完成 js/index.js 中的 formSubmit 函数&#xff0c;用户填写表单信息后&#xff0c;点击蓝色提交按钮&#xff0c;表单项隐藏&#xff0c;页面显示用户提交的表单信息&#xff08;在 id 为 result 的元素显示&#…...

React——组件通讯

组件通讯介绍 组件中的状态是私有的&#xff0c;组件的状态只能在组件内部使用&#xff0c;无法直接在组件外使用&#xff0c;但是我们在日常开发中&#xff0c;通常会把相似、功能完整的应用才分成组件&#xff08;工厂模式&#xff09;利于我们的开发&#xff0c;而不同组件直…...

php闭包应用

laravel 路由 bingTo 把路由URL映射到匿名回调函数上&#xff0c;框架会把匿名回调函数绑定到应用对象上&#xff0c;这样在匿名函数中就可以使用$this关键字引用重要的应用对象。Illuminate\Support\Traits\Macroable的__call方法。 自己写一个简单的demo: <?php <?…...

基于python+vue的OA公文发文管理系统flask-django-php-nodejs

系统根据现有的管理模块进行开发和扩展&#xff0c;采用面向对象的开发的思想和结构化的开发方法对OA公文发文管理的现状进行系统调查。采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…...

脉冲变压器电感的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理3,结构特点3.1,铁心结构3.2,铁心材料3.3,绕组4,工艺流程4.1,准备铁芯4.2,绕制线圈4.3,安装线圈4.4,固定线圈4.5,绝缘处理4.6,高压脉冲引出...

java中Arrays介绍及常用方法

在Java中&#xff0c;java.util.Arrays类是一个提供了各种操作数组的工具类。该类提供了一系列静态方法来对数组进行排序、搜索、填充、复制等操作。下面是对Arrays类的介绍以及常用方法的说明: toString()方法&#xff1a;将数组转换为字符串形式并返回&#xff0c;方便输出数…...

CTF题型 Http请求走私总结Burp靶场例题

CTF题型 Http请求走私总结&靶场例题 文章目录 CTF题型 Http请求走私总结&靶场例题HTTP请求走私HTTP请求走私漏洞原理分析为什么用前端服务器漏洞原理界定标准界定长度 重要!!!实验环境前提POST数据包结构必要结构快速判断Http请求走私类型时间延迟CL-TETE-CL 练习例题C…...

Nginx 的安装、启动和关闭

文章目录 一、背景说明二、Nginx 的安装2.1、依赖的安装2.2、Nginx 安装2.3、验证安装 三、启动 Nginx3.1、普通启动3.2、如何判断nginx已启动3.3、通过配置启动3.4、设置开机启动 四、关闭 Nginx4.1、优雅地关闭4.2、快速关闭4.3、只关闭主进程4.4、使用nginx关闭服务 五、重启…...

python 操作excel(openpyxl.load_workbook)、excel操作封装

操作excel 其他的库&#xff1a; xlrd xlwt &#xff1a; 过时了&#xff0c;只能操作xls后缀的文件。pandas&#xff1a;大数据测试 数据分析项目会用。 openpyxl&#xff1a;第三方库 支持的格式有&#xff1a;.xlsx、.xlsm、.xltx、.xltm&#xff0c;l不支持.xls文件格式…...

MySQL系统参数配置实战:生产环境优化

引言&#xff1a; MySQL作为广泛应用的关系型数据库&#xff0c;其系统参数配置直接影响着数据库的性能、稳定性以及资源利用率。本文旨在深入探讨MySQL的核心系统参数&#xff0c;并提供一份面向生产环境的配置建议&#xff0c;以帮助运维人员更好地优化数据库性能&#xff0…...

判断列表中每一个元素的个数

1.使用循环 nums [1, 1, 1, 2, 2, 3]# 构建一个空字典来存储元素和它们出现的次数 count_dict {}# 遍历列表&#xff0c;更新字典中每个元素出现的次数 for num in nums:if num in count_dict:count_dict[num] 1else:count_dict[num] 1# 输出统计结果 for num, count in c…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

LOOI机器人的技术实现解析:从手势识别到边缘检测

LOOI机器人作为一款创新的AI硬件产品&#xff0c;通过将智能手机转变为具有情感交互能力的桌面机器人&#xff0c;展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家&#xff0c;我将全面解析LOOI的技术实现架构&#xff0c;特别是其手势识别、物体识别和环境…...