当前位置: 首页 > 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…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...