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组件
实现效果 根据接口传来的数据,使用echarts绘制出,共用一个x轴的图表 功能:后端将所有数据传送过来,前端通过监听选中值来展示对应的图表数据 数据格式: 代码: <template><div><div clas…...
wireshark数据捕获实验简述
Wireshark是一款开源的网络协议分析工具,它可以用于捕获和分析网络数据包。是一款很受欢迎的“网络显微镜”。 实验拓扑图: 实验基础配置: 服务器: ip:172.16.1.88 mask:255.255.255.0 r1: sys sysname r1 undo info enable in…...
如何利用RunnerGo简化性能测试流程
在软件开发过程中,测试是一个重要的环节,需要投入大量时间和精力来确保应用程序或网站的质量和稳定性。但是,随着应用程序变得更加复杂和庞大,传统的测试工具在面对比较繁琐的项目时非常费时费力。这时,一些自动化测试…...
继承和深拷贝封装
继承和深拷贝封装 今日目标: 1.es5寄生组合式继承 2.es6类的继承 3.深拷贝函数封装 00-回顾 # 不同数据类型赋值时的区别: 基本数据类型,赋的就是值,相互之间不再有任何影响 引用数据类型,赋的是地址,…...
《定时执行专家》:Nircmd 的超级搭档,解锁自动化新境界
目录 Nircmd 简介 《定时执行专家》与 Nircmd 的结合 示例: 自动清理电脑垃圾: 定时发送邮件: 定时关闭电脑: 《定时执行专家》的优势: 总结: 以下是一些其他使用示例: 立即下载《定时执行专家》: Nircmd 官方网站: 更…...
Android 封装的工具类
文章目录 日志封装类-MyLog线程封装类-LocalThreadPools自定义进度条-LoadProgressbar解压缩类-ZipUtils本地数据库类-MySQLiteHelper访问webservice封装-HttpUtilsToolbar封装类-MaterialToolbar网络请求框架-OkGo网络请求框架-OkHttp 日志封装类-MyLog 是对android log的封装…...
linux下线程分离属性
linux下线程分离属性 一、线程的属性---分离属性二、线程属性设置2.1 线程创建前设置分离属性2.2 线程创建后设置分离属性 一、线程的属性—分离属性 什么是分离属性? 首先分离属性是线程的一个属性,有了分离属性的线程,不需要别的线程去接合…...
Leetcode 208. 实现 Trie (前缀树)
心路历程: 一道题干进去了一个下午,单纯从解题角度可以直接用python的集合就很简单地解决(不知道是不是因为python底层的set()类)。后来从网上看到这道题应该从前缀树的角度去做,于是花了半个多小时基于字典做了前缀树…...
蓝桥杯练习题——健身大调查
在浏览器中预览 index.html 页面效果如下: 目标 完成 js/index.js 中的 formSubmit 函数,用户填写表单信息后,点击蓝色提交按钮,表单项隐藏,页面显示用户提交的表单信息(在 id 为 result 的元素显示&#…...
React——组件通讯
组件通讯介绍 组件中的状态是私有的,组件的状态只能在组件内部使用,无法直接在组件外使用,但是我们在日常开发中,通常会把相似、功能完整的应用才分成组件(工厂模式)利于我们的开发,而不同组件直…...
php闭包应用
laravel 路由 bingTo 把路由URL映射到匿名回调函数上,框架会把匿名回调函数绑定到应用对象上,这样在匿名函数中就可以使用$this关键字引用重要的应用对象。Illuminate\Support\Traits\Macroable的__call方法。 自己写一个简单的demo: <?php <?…...
基于python+vue的OA公文发文管理系统flask-django-php-nodejs
系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对OA公文发文管理的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的…...
脉冲变压器电感的工艺结构原理及选型参数总结
🏡《总目录》 目录 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中,java.util.Arrays类是一个提供了各种操作数组的工具类。该类提供了一系列静态方法来对数组进行排序、搜索、填充、复制等操作。下面是对Arrays类的介绍以及常用方法的说明: toString()方法:将数组转换为字符串形式并返回,方便输出数…...
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 其他的库: xlrd xlwt : 过时了,只能操作xls后缀的文件。pandas:大数据测试 数据分析项目会用。 openpyxl:第三方库 支持的格式有:.xlsx、.xlsm、.xltx、.xltm,l不支持.xls文件格式…...
MySQL系统参数配置实战:生产环境优化
引言: MySQL作为广泛应用的关系型数据库,其系统参数配置直接影响着数据库的性能、稳定性以及资源利用率。本文旨在深入探讨MySQL的核心系统参数,并提供一份面向生产环境的配置建议,以帮助运维人员更好地优化数据库性能࿰…...
判断列表中每一个元素的个数
1.使用循环 nums [1, 1, 1, 2, 2, 3]# 构建一个空字典来存储元素和它们出现的次数 count_dict {}# 遍历列表,更新字典中每个元素出现的次数 for num in nums:if num in count_dict:count_dict[num] 1else:count_dict[num] 1# 输出统计结果 for num, count in c…...
基于2D工程图几何特征与梯度提升模型的制造成本智能预测
1. 项目概述:从图纸到报价的智能革命在制造业,尤其是像汽车零部件这样的离散制造领域,报价速度直接决定了订单的生死。传统上,拿到一张新的2D工程图(DWG格式),成本工程师需要花上几天甚至几周时…...
作业本耐用度差距巨大?深圳大明印刷厂拆解合规工艺,告别定制作业本掉页开裂通病
在校园日常教学中,很多学校都会遇到同一个难题:同一学期采购的作业本、定制作业本,品质差距悬殊,有的完好无损用到期末,有的短短几周就出现书脊开裂、页面脱落、边角破损、翻页卡顿等问题。不少人误以为是学生使用习惯…...
放弃编码器!纯靠MPU6050和PID算法,手把手教你用TT马达实现平衡小车稳定控制(STM32F103C8T6实战)
纯MPU6050STM32F103的TT马达平衡车实战:无编码器PID控制全解析当大多数平衡小车方案都在强调编码器对速度反馈的不可或缺性时,我们决定挑战一个更极简的配置:仅用5美元的TT马达、9轴的MPU6050和STM32F103C8T6最小系统板,完全舍弃编…...
深度解析网络设备权限管理工具:中兴光猫工厂模式与Telnet服务完整指南
深度解析网络设备权限管理工具:中兴光猫工厂模式与Telnet服务完整指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 在当今网络设备管理领域,获取设备完整控制…...
告别DLL缺失烦恼!Visual C++运行库合集一键搞定Windows应用依赖问题
告别DLL缺失烦恼!Visual C运行库合集一键搞定Windows应用依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经在打开某个软件或游戏时…...
终极指南:用D2DX让《暗黑破坏神2》在现代电脑上焕发新生
终极指南:用D2DX让《暗黑破坏神2》在现代电脑上焕发新生 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 还在为经…...
学习日志(三)【php语法学习,iscc校赛wp】
1. 任务 1.1.1.1.1.1. 知识部分 rce看【之前的笔记?】php的知识点学习继续jwt token好像是比赛的题目考察内容,我看看php伪协议 1.1.1.1.1.2. 题目 参加iscc比赛【五一】rce题目 1.1.1.1.1.3. 环境配置 把vscode搞好,上学期没有把Php配…...
Windows安卓应用安装终极指南:5分钟快速配置跨平台应用体验
Windows安卓应用安装终极指南:5分钟快速配置跨平台应用体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 还在为在Windows电脑上无法直接安装安卓应用而烦…...
基于ESP8266与RGBDigit的Wi-Fi网络时钟:硬件设计、物联网集成与DIY实践
1. 项目概述:一个能感知环境的网络时钟如果你和我一样,对复古又带点科技感的显示设备没有抵抗力,同时又是个喜欢动手折腾的极客,那么这个项目绝对能让你在工作室或家里多一个既实用又炫酷的玩意儿。我说的就是这款基于RGBDigit数码…...
终极音乐解锁指南:3步让加密音乐在任何设备自由播放
终极音乐解锁指南:3步让加密音乐在任何设备自由播放 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:/…...
