MySQL:谈谈你对mysql事务的理解

事务是数据库操作的基本单位,确保数据完整性和一致性。ACID特性包括原子性、一致性、隔离性和持久性。隔离级别有四种:读未提交、读已提交、可重复读和串行化,分别解决并发问题。读未提交可能导致脏读,读已提交则可能有不可重复读,可重复读解决了不可重复读,而串行化通过串行执行事务避免所有问题。设置隔离级别可以平衡并发性能和数据一致性的需求。
摘要由CSDN通过智能技术生成

什么是事务

     事务就是一次对数据库操作的若干单元的一条或多条sql的管理 ,事务管理的目标就是完整性,要么全部执行,要么全不执行

    事务的特性:ACID,原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

原子性(Atomicity)

    一个事务中的 所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。如果一个事务中间执行时报错,那么已经执行sql语句会回滚到事务开始前的状态。

隔离性(Isolation)

    控制多个事务在并发读写时,保证互不影响,隔离级别分别有四种: 读 未提交、读 已提交、可重复读、串行化。

持久性(Durability)

    事务结束之后,对数据的修改时永久性的,即使系统故障也不会丢失。

一致性(Consistency)

    保证对数据操作的完整性。在事务开始前和事务开始后,数据库的完整性需要保持。前面提到的原子性、隔离性、持久性都是为了保证事务的一致性。

事务的隔离级别

为什么会有隔离级别

    MySQL 是一个服务器/客户端架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话。我们可以同时在不同的会话里输入各种语句,这些语句可以作为事务的一部分进行处理。不同的会话可以同时发送请求,也就是说服务器可能同时在处理多个事务,这样子就会导致不同的事务可能同时访问到相同的记录。我们前边说过事务有一个特性称之为隔离性,理论上在某个事务对某个数据进行访问时,其他事务应该进行排队,当该事务提交之后,其他事务才可以继续访问这个数据。但是这样子的话对性能影响太大,所以设计数据库的大叔提出了各种隔离级别,来最大限度的提升系统并发处理事务的能力。

只有 InnoDB 支持事务,所以这里说的事务隔离级别是指InnoDB 下的事务隔离级别

查看隔离级别

SELECT @@global.transaction_isolation,@@transaction_isolation;

设置隔离级别

SET GLOBAL TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

隔离级别

读 未提交

    一个事务可以读到另一个事务未提交的数据。问题可能会出现回滚,另一个事务如果回滚,那么这个事务读到的就是脏数据,称为脏读

读已提交

    一个事务只能读到另一个事务已提交的数据。读 已提交 解决了脏读的问题,但是会带来不可重复读的问题:A事务开始读到的一个数据10,之后B事务将10修改为5并且提交,A事务再读就又是5,称为不可重复读。

可重复读

    同一事务多次读到的相同的数据仍是一样,不管他有没有被其他事务修改并提交的。解决了不可重复读的问题。

串行化

    事务串行执行,避免了以上的所有问题。
在这里插入图片描述

事务的实现原理

MVCC(Multi-Version Concurrency Control)是 MySQL 数据库中的一种并发控制机制。它用于管理并发事务对数据的访问,以保证数据的一致性和隔离性。MVCC 的核心思想是在事务执行期间,数据库会为每个事务创建一个可见的数据版本,使得事务之间的读写操作可以并行进行,而不会相互干扰。 具体来说,MVCC 通过在每行数据中添加额外的版本信息来实现。当一个事务开始时,它会获取一个全局的事务 ID,每个数据行也会记录自己的创建版本号和删除版本号。在事务执行期间,每个事务只能看到比自己开始时间早创建的、未被删除的数据行。 对于读操作,MVCC 会根据事务的开始时间和数据行的版本号来决定是否可见。如果数据行的创建版本号早于事务开始时间,且删除版本号为空或晚于事务开始时间,则该数据行可见。 对于写操作,MVCC 会创建一个新的数据版本,并将新版本的创建版本号设置为当前事务的开始时间。同时,将原数据行的删除版本号设置为当前事务的开始时间。 MVCC 的优点是可以提高数据库的并发性能,减少锁争用和冲突。它允许读操作之间的并发执行,不会阻塞其他事务的读操作。同时,写操作也可以与读操作并发执行,只需要在提交时进行冲突检测和处理。 然而,MVCC 也存在一些限制。由于需要为每个数据行记录版本信息,会增加存储空间的消耗。同时,长事务的存在也可能导致版本链的过长,影响性能。因此,在使用 MVCC 时需要注意合理设置事务的隔离级别和管理事务的生命周期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值