MySQL的事务深入理解和存储系统

目录

一、事务的基本理论

1.事务的隔离

1.1事务之间的相互影响

1.2事物隔离级别

2.查询和设置事物隔离级别

2.1查询全局事务隔离级别

2.2查询会话事物隔离级别

2.3设置全局事务隔离级别

2.4设置会话事务隔离级别

​编辑3.事务控制语句

​编辑3.1提交事务

​编辑3.2回滚事务

3.3多点回滚

3.4设置控制事务

二、MySQL存储引擎

1.存储引擎的种类

2.InnoDB存储引擎

3.MylSAM存储引擎

1.特点

2.文件存储格式

4.修改存储引擎

4.1修改已存在的表

4.2建表时指定引擎

4.3修改配置文件


一、事务的基本理论

1.事务的隔离

在数据库中,多个事务同时执行时,它们之间可能存在相互影响。事务的隔离性通过事务隔离级别来控制,不同的隔离级别对事务间的影响有不同的管理策略。

1.1事务之间的相互影响

脏读(Dirty Read): 在较低的隔离级别(如读未提交Read Uncommitted)下,一个事务可以读取到另一个事务尚未提交的数据,如果这个事务随后被回滚,那么读取的数据就是无效的。

不可重复读(Non-repeatable Read): 即在一个事务中,对同一行数据进行两次读取时,结果不一致,因为在这两次读取之间,另一个事务可能对此行数据进行了修改并提交了事务。

幻读(Phantom Read): 在可重复读(Repeatable Read)隔离级别下,同一个事务在执行相同的查询时,两次查询结果集中包含了不同的行(新增的行像幽灵一样突然出现),这是因为另一个事务在这两次查询期间插入了新的行并提交了事务。

丢失更新(Lost Update): 当两个事务同时修改同一行数据且都未进行锁操作时,可能会导致其中一个事务的更新丢失。例如,两个事务先后将某行的值从A更新为B和C,最终的结果可能是A直接变为C,B的更新被忽略。

不可重复读:指的是在同一个事务内,同一个查询在不同时刻读取到了不同的数据。比如事务A在开始时读取了一行数据,但是在事务A还未结束时,事务B修改了这行数据并提交了事务。当事务A再次读取同一行数据时,发现数据内容与之前读取的结果不同,这就发生了不可重复读。

幻读:则是在同一个事务内,同一个查询在不同时刻读取到了不同的行数。同样是事务A在开始时执行了一个范围查询(如:查询年龄大于20岁的人数),并在结果集基础上进行了操作。之后事务B插入了一些新的满足条件(年龄大于20岁)的数据并提交了事务。当事务A再次执行同样的范围查询时,发现结果集中出现了新的行(即“幽灵行”),尽管它先前读取过的数据行并未发生变化,但行数增加了,这就是幻读现象。

1.2事物隔离级别

为了解决这些问题,数据库系统提供了不同的事务隔离级别:

读未提交(Read Uncommitted):最低隔离级别,允许脏读、不可重复读和幻读。

读已提交(Read Committed):解决了脏读问题,但仍可能出现不可重复读和幻读。

可重复读(Repeatable Read):MySQL默认的隔离级别,解决了脏读和不可重复读问题,但幻读仍有可能发生(在MySQL中通过Next-Key Locks解决一部分幻读问题)。

串行化(Serializable):最高隔离级别,可以避免所有并发问题,但可能会导致性能下降,因为它几乎等同于事务串行执行。在串行化级别下,事务冲突会被严格禁止,以确保事务间不会互相影响。

事务隔离级别的作用范围分为两种

全局级:对所有的会话有效

会话级:只对当前的会话有效

2.查询和设置事物隔离级别

2.1查询全局事务隔离级别

show global variables like '%isolation%';

mysql> show global variables like '%isolation%';

select @@global.tx_isolation;

mysql> select @@global.tx_isolation;

transaction_isolation 和 tx_isolation 展示的是当前服务器的全局事务隔离级别

2.2查询会话事物隔离级别

show session variables like '%isolation%';

mysql> show session variables like '%isolation%';

select @@session.tx_isolation; 

mysql> select @@session.tx_isolation; 

在进行会话事务,即交互时的隔离级别同样为repeatable read,即可重复读

2.3设置全局事务隔离级别

set global transaction isolation level 事务隔离级别;

设置全局默认事务隔离级别为read committed

set global transaction isolation level read committed;

2.4设置会话事务隔离级别

set session transaction isolation level 事务隔离级别;

设置会话事务为read committed

set session transaction isolation level read committed;

3.事务控制语句

首先准备工作创建名为kgc_school的数据库,并在kgc_school下创建名为ky35的数据表

插入数据


3.1提交事务

使用begin开始事务,而后开始处理、修改数据,最后使用commit提交事务,算一次完整的事务,则在事务中的所有操作生效,否则不生效。

首先begin开始事务

给'xuzhou'的money减少100

最后commit提交事务

3.2回滚事务

使用rollback指令回滚未提交的事务,使数据回到事务开始前的状态

可知'xuzhou'的money是900

开启事务并修改

使用rollback进行回滚

3.3多点回滚

开始事务后,使用savepoint s1 进行节点标记,而后使用 rollback to savepoint 节点名称进行回滚

第一次修改的值为800,并设置事务节点为s1

再次修改,此时'xuzhou'的money数值为700,并设置事务节点为s2

进行回滚并回到s1

此操作不可逆,如果回滚到s1之后,不能回到之后的节点,只能往前

3.4设置控制事务

使用set指令设置控制事务

修改控制事务autocommit的值为off

如果没有开启自动提交,当前会话连接的mysql的所有操作都会当成一个事务直到你输入rollback|commit;当前事务才算结束,当前事务结束前新的mysql连接时无法读取到任何当前会话的操作结果。

 如果开起了自动提交,mysql会把每个sql语句当成一个事务,然后自动的commit。

二、MySQL存储引擎

在MySQL数据库的世界里,存储引擎作为数据库的核心组件,负责数据的存储、检索和索引管理等关键任务。MySQL支持多种存储引擎,每种引擎都有其独特的优劣和适用场景,使得MySQL能够灵活适应各种各样的业务需求。


1.存储引擎的种类

使用show engines;指令查当前mysql支持哪些存储引擎

字段含义

Engine存储引擎
Support系统是否支持
Comment注释信息
Transactions是否支持事务
XA是否支持XA协议
Savepoints

是否支持节点

2.InnoDB存储引擎

InnoDB是MySQL的默认存储引擎。InnoDB引擎支持行级锁定,能够有效减少并发操作时的锁争用,提高并发性能。同时,它实现了ACID(原子性、一致性、隔离性、持久性)事务特性,确保了数据的一致性和安全性。此外,InnoDB引擎支持外键约束,提供了良好的数据完整性保障。在现代MySQL版本中,InnoDB还支持分区表、聚集索引和自适应哈希索引等特性,进一步优化了性能。

MRG_MyISAM存储引擎

基于MERGE,将多个MyISAM表合并成一个逻辑表。相同MyISAM表的集合

MEMORY存储引擎

MEMORY(以前称为 HEAP)存储引擎将数据存储在内存中,因此它的查询速度极快,尤其适用于临时表或者需要快速读写的场景。但由于数据仅存在于内存中,一旦MySQL服务器关闭,表中的数据就会丢失。此外,MEMORY引擎也不支持事务和外键约束。

BLACKHOLE黑洞引擎

所有写入都被丢弃,用于记录binlog但不实际存储数据

MyISAM存储引擎

MyISAM曾是MySQL早期的默认存储引擎,虽然在事务处理和行级锁定方面不如InnoDB强大,但因其索引文件和数据文件分离、全表扫描速度快等特点,在读密集型场景中表现出色。MyISAM不支持事务和外键,基于哈希,存储在内存中,对临时表很有用

ARCHIVE存储引擎

ARCHIVE存储引擎主要用于大量历史数据归档,它压缩率极高,适合长期存储且很少需要更新的大容量静态数据。ARCHIVE引擎只支持INSERT和SELECT操作,不支持UPDATE和DELETE,也不支持索引。

CSV存储引擎

以CSV格式存储数据,易于与其他程序交换数据

目前MySQL常用的存储引擎有InnoDB存储引擎与MyISAM存储引擎

2.lnnoDB存储引擎

MySQL从5.5之后版本开始,默认的存储引擎为 InnoDB

在建表时,不需要指定,默认就是此类

DML操作遵循ACID模型,支持事务;

行级锁,如果事务A正在操作某行,其它事务不能操作此行,可以操作此表的其他行,提高并发访问性能;

支持外键 FOREIGN KEY约束,保证数据的完整性和正确性

3.MylSAM存储引擎

1.特点

不支持事务,不支持外键

支持表锁,操作或者修改一张表的数据时,整张表会被锁起来,不允许其他用户操作,等到操作结束退出后释放,不支持行锁

访问速度快,对事物的完整性没有要求

2.文件存储格式

MyISAM 表支持 3 种不同的存储格式

静态表(Fixed-length Table)

在MySQL的MyISAM存储引擎中,静态表也称为固定长度表。这类表中的每一行数据占用的空间是固定的,即所有列的长度总和。例如,如果一个列定义为CHAR(10),无论实际存储的内容长短,都将占用10个字符的固定空间。静态表的优点在于查询速度快,因为行数据是连续存储且大小恒定,易于缓存和快速定位。缺点是如果数据长度小于定义长度时,会浪费存储空间。

动态表(Variable-length Table)

动态表(也称变长表)中的行长度是可以变化的。例如,在VARCHAR类型的列中,实际存储的数据长度与列定义的最大长度有关。动态表能够更有效地利用存储空间,尤其是对于包含大量可变长度数据的列时。但这也可能导致数据在硬盘上的存储位置不连续,影响到某些查询操作的性能。
压缩表(Compressed Table):

压缩表

是对已有表的数据进行压缩存储,以节省磁盘空间。在MySQL中,可以使用MyISAM的myisampack工具对MyISAM表进行压缩,创建出来的表为只读表。InnoDB存储引擎也支持表压缩,通过设置相应的表选项可以在表级别进行压缩,这样既能节省存储空间,又能保持表的读写能力。压缩表在读取时需要解压,这会增加CPU的消耗,但在I/O密集型环境中,由于减少了磁盘读写,总体上可能提高性能。

MyISAM在磁盘上存储成三个文件,文件名和表名都相同,但是扩展名分别为:

文件存储表结构的定义的扩展名:.frm

数据文件的扩展名为 .MYD

索引文件的扩展名是 .MYI

4.修改存储引擎

4.1修改已存在的表

查看已存在的表

alter table 表名 engine = 存储引擎种类;

mysql> alter table ky35 engine =myisam;

查看

4.2建表时指定引擎

create table 表名 (字段1 字段1类型[comment 注释信息],字段2 字段2类型) engine = 存储引擎种类

mysql> create table myi(id int(4),name varchar(10),age char(3))engine=myisam;

查看

4.3修改配置文件

在/etc/my.cnf文件加添加指定信息,来确定建表时的默认存储引擎类型

修改后重新启动文件

创建文件

查看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/769121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H3C技术大全复现之高级路由交换技术 1

华子目录 VLAN 基本技术VLANIEEE 802.1Q交换机端口类型MVRP协议实验测试 VLAN扩展技术Super VLAN产生背景Super vlan(相当于vlanif接口,也属于虚拟接口,可以充当网关)Sub vlan(普通vlan)关于代理ARP普通代理…

【C语言】编译链接

1、宏(***) 1.1#define定义宏 #define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义 宏(define macro)。 注意:用于对数值表达式进行求…

Java毕业设计-基于springboot开发的网上图书商城平台-毕业论文+答辩PPT(附源代码+演示视频)

文章目录 前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求分析3、系统功能结构 三、系统实现展示1、系统功能模块2、管理员功能模块3、卖家功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的网上图书商城…

taro之Swiper的使用

图样&#xff1a; 往往我们需要轮播图去显示我们想要的图片之类的 这是工作的代码 <View classNametop-title><SwiperclassNamebanner-swiperinterval{3000}circularautoplay>{homeBannerList.map((item) > {return (<SwiperItem key{item.id}><View…

apisix创建https

总结了下apisix 使用https 的问题和方法 1、apisix 默认https 端口是9443 2、apisix 需要上传证书后才可以使用https 否二curl测试会报错 SSL routines:CONNECT_CR_SRVR_HELLO 3、apisix 上传证书方法 我是使用的自签名证书&#xff0c;注意自签名证书的Common Name 要写你…

HCIP —— 生成树 (下)

目录 STP&#xff08;生成树&#xff09;的角色选举 根网桥 根端口 选举规则&#xff1a; 指定端口 生成树的端口状态 STP的接口状态&#xff1a;禁用、阻塞、侦听、学习、转发 五种状态 禁用状态 阻塞状态 侦听状态 学习状态 转发状态 当生成树拓扑结构发生变化 …

一文6000字从0到1使用Locust做性能测试【建议收藏】

01、Locust介绍 Locust 一个开源性能测试工具&#xff0c;使用Python代码来定义用户行为&#xff0c;用它可以模拟百万计的并发用户访问你的系统。 性能工具对比&#xff1a; LoadRunner 是非常有名的商业性能测试工具&#xff0c;功能非常强大。使用也比较复杂&#xff0c;目…

【漏洞复现】科立讯通信指挥调度平台editemedia.php sql注入漏洞

漏洞描述 在20240318之前的福建科立讯通信指挥调度平台中发现了一个漏洞。该漏洞被归类为关键级别,影响文件/api/client/editemedia.php的未知部分。通过操纵参数number/enterprise_uuid可导致SQL注入。攻击可能会远程发起。 免责声明 技术文章仅供参考,任何个人和组织使…

电工职业培训初级到高级,电工技术与试题资料大全

一、资料描述 本套电工全套资料&#xff0c;大小1.70G&#xff0c;共有178个文件&#xff0c;PDF文件为主。 二、资料目录 01-电工技术基础知识大全 02-电工基础知识 03-电工技术 04-电工操作技术 05-电工识图 06-电工口诀 07-电工手册 08-PLC的应用 09-电工电子电气…

用eclipse创建Web项目,通过Servlet实现Web访问的功能。

要使用Eclipse和Tomcat 10创建一个简单的Web项目&#xff0c;并通过Servlet实现Web访问功能&#xff0c;你需要遵循以下详细步骤&#xff1a; 1. 安装和配置Eclipse和Tomcat 10 确保你已经安装了Eclipse IDE for Java EE Developers和Tomcat 10。如果还没有安装&#xff0c;请…

【VALL-E-01】环境搭建

本系列文章系本人知乎账号迁移 本文系个人知乎专栏文章迁移 VALL-E 网络是GPT-SOVITS很重要的参考 知乎专栏地址&#xff1a; 语音生成专栏 相关文章链接&#xff1a; 【VALL-E-01】环境搭建 【VALL-E-02】核心原理 1、环境包使用 从效果看没有GPT-SOVITS 来的好 环境安装…

python + tensorflow 开局托儿所自动点击脚本

python开局托儿所自动点击脚本 屏幕截图图片数字识别消除算法自动点击 屏幕截图 python 屏幕截图可以使用pyautogui或者PIL。我使用的是PIL中的ImageGrab(要授权)。 image ImageGrab.grab(bbox(0, 0, tool.static_window_width, tool.static_window_height)) image np.arra…

后端如何返回404地址

当我们网站输入不存在的地址&#xff0c;经常会出现404的页面&#xff0c;这是如何做到的 1.添加配置 spring:mvc:view:prefix: /templates/suffix: .html 2.resources下添加templates目录&#xff0c;下面放404的网站 3.添加依赖&#xff0c;版本在主pom里面配置好了&#x…

springboot项目学习-瑞吉外卖(3)

1.任务 实现分类管理功能数据的添加实现分类管理数据的分页查询实现分类管理数据的删除 由于前两个业务和之前的业务基本一致&#xff0c;所以这里就不重点介绍了&#xff0c;只放代码 2.分类管理功能数据的添加 前提&#xff1a;导入category实体类 2.1.CategoryMapper接口 //…

海外基金牌照的优势及注意事项-华媒舍

一、了解海外基金牌照 在投资领域&#xff0c;海外基金牌照是指投资者可以通过获得海外金融监管机构颁发的许可证&#xff0c;参与海外基金投资。拥有海外基金牌照的投资者可以享受更广泛的投资机会&#xff0c;包括跨境投资、全球资产配置等。 二、海外基金牌照的优势 多元化…

【HarmonyOS】ArkUI - 页面路由

一、概念 页面路由是指在应用程序中实现不同页面之间的跳转和数据传递。 案例&#xff1a;第一次使用某个购物应用&#xff0c;打开时肯定会是一个登录页&#xff0c;在登录成功以后&#xff0c;会跳转到首页&#xff0c;然后可能会去搜索&#xff0c;就会进入到搜索列表页&am…

水下蓝牙耳机哪个好?必看4款购买单,拒绝踩雷!

在当今的科技时代&#xff0c;无线蓝牙耳机已经成为了我们生活中不可或缺的一部分。无论是运动、工作还是休闲娱乐&#xff0c;一款好的蓝牙耳机都能为我们带来极大的便利和乐趣。然而&#xff0c;在水下使用蓝牙耳机却是一个相对特殊的应用场景&#xff0c;需要考虑到防水、防…

力扣刷题Days25-45. 跳跃游戏 II(js)

目录 1&#xff0c;题目 2&#xff0c;代码 贪心算法正向查找 3&#xff0c;学习 解题思路 具体代码处理 数组遍历的最后边界的处理&#xff1a; 1&#xff0c;题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向…

Nuclei Poc开发

1、Poc开发工具介绍 Nuclei&#xff1a;https://nuclei.projectdiscovery.io/ Cloud Platfrom云平台&#xff1a;https://cloud.projectdiscovery.io/ 2、目标站点简介 目标演示站点&#xff1a;http://glkb-jqe1.aqlab.cn/nacos/#/login 指纹&#xff1a;Nacos 已知常用漏洞…

基于springboot+vue的农产品直卖平台

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…