MySQL-事务隔离-1

前言

InnoDB是事务型存储引擎,其事务模型的目标是以传统两阶段锁的方式(2PL)综合实现了多版本数据库(MVCC)的最优性质。默认地,InnoDB采取行级锁处理事务、并以无锁的方式执行查询,该方式与Oracle数据库的事务模型保持一致。InnoDB的锁信息是以空间高效的方式存储,因此不需要实现锁的升级,一般情况下,多个用户允许锁住InnoDB表的每一行记录或者任意随机大小的行记录子集,而不会引起内存损耗。

2PL

SQL:1992标准提出的规范,两阶段锁,简单地认为,执行锁分为两个阶段,第一阶段提交锁,第二阶段释放锁,每个阶段的处理方式不一样。

MVCC

MCCC是multiversion concurrency control的缩写,其意思是指多版本并发控制,该机制能让InnoDB事务在某个隔离级别中执行一致读的操作,例如,其中一个事务A查询的行记录正在被其他事务B更新,则事务A能看到事务B在提交更新之前的值,该机制是一种提升并发访问的强大技术,事务A在无需等待事务B释放锁的情况下,执行了高效的查询操作。

ACID

缩略语表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability),一个数据库系统必须具备这些属性,表示一个事务应具备的性质,因此,InnoDB的事务特性必须遵守ACID的原则。

原子性

事务是数据库存储引擎工作的单元,事务可以被提交、事务可以被回滚,当一个事务对数据库的存储记录做出变更,只能是以下两种结果之一,要么当事务被成功提交,则变更生效,要么当事务被回滚,则变更失效

一致性

数据库在任何时候都需要保持数据版本的一致性,其时间段包括在事务提交之后、在事务回滚之后、在事务处理中,假如,数据记录的变更涉及到多个关联表,则一个查询或者看到全部旧值、或者看到全部新值,而不可能看到既有旧值也有新值的混合值

隔离性

数据库的每个事务都是受到保护的,在事务的处理过程中事务之间相互隔离,事务之间不能相互干扰,事务之间不能看到各自未提交的数据版本,如前面所述,事务的隔离性是使用锁机制实现的,用户可以手动设置事务的隔离级别,权衡与调整事务隔离级别可以降低事务的受保护性,从而提升性能与并发性,但是,事务之间始终需要保持相互隔离而不相互干扰

持久性

事务的执行结果是具备持久性的,一旦事务被提交,则该事务涉及到的数据记录的变更是安全的,也就是,即使数据库系统发生电源故障、系统崩溃、竞争条件、其他潜在的易受攻击性危险这些状况,被提交的数据记录的变更也是安全的,一般情况下,持久性涉及到写磁盘,以一定数量的冗余写以保证在写异常发生的情况下保证数据的不丢失,例如,双写缓冲机制

事务隔离级别

事务隔离是数据处理的基础能力之一,隔离即使ACID中的I(isolation的首字母大写)。

(未完待续)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wangys2006

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值