【易客吧】_全网激活码总代_激活码商城

您现在的位置是:首页 > 热门资讯 > 正文

热门资讯

MySQL 意向锁机制:揭秘数据库事务管理的秘密

用户投稿2024-04-17热门资讯27

简介

在数据库系统中,事务是一个不可分割的工作单元。在事务执行期间,系统必须确保数据的完整性和一致性。为了实现这一目标,MySQL 采用了多种锁机制,其中意向锁是一个重要的组成部分。

意向锁

意向锁是一种表级锁,用于指示事务对表的意图。有两种类型的意向锁:共享意向锁 (IX):表示事务打算读取表的数据。排他意向锁 (IX):表示事务打算修改表的数据。意向锁的作用是:阻止其他事务获得与当前事务冲突的锁。提高系统性能,通过避免不必要的锁争用。

意向锁的获取

当一个事务执行 SELECT 语句时,系统将获取一个共享意向锁。当一个事务执行 INSERT、UPDATE 或 DELETE 语句时,系统将获取一个排他意向锁。

意向锁的释放

当一个事务提交或回滚时,它持有的所有意向锁都会被释放。

意向锁的类型

意向锁可以分为以下几种类型:表意向锁 (TIL):针对整个表。页意向锁 (PIL):针对表的特定页。记录意向锁 (RIL):针对表的特定记录。表意向锁提供最强的保护,而记录意向锁提供最弱的保护。

意向锁与排他锁

意向锁和排他锁是两种不同的锁类型。排他锁用于防止其他事务访问被锁定的数据,而意向锁用于指示事务对数据的意图。意向锁与排他锁之间存在以下层次关系:一个事务不能获得与现有排他锁冲突的意向锁。一个事务可以获得与现有共享意向锁不冲突的排

深入理解MySQL数据库各种锁(总结)

MySQL 意向锁机制:揭秘数据库事务管理的秘密 第1张

MyISAM和InnoDB存储引擎使用的锁:

封锁粒度小:

由于InnoDB存储引擎支持的是行级别的锁,因此意向锁(因为意向锁是表锁)其实不会阻塞除全表扫以外的任何请求。故表级意向锁与行级锁的兼容性如下所示

参考

参考

行锁的三种算法:

这条语句阻止其他事务插入10和20之间的数字,无论这个数字是否存在。间隙可以跨越0个,单个或多个索引值。

共享锁:

排他锁:

乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改(天真), 操作数据时不会上锁 ,但是 更新时会判断在此期间有没有别的事务更新这个数据,若被更新过,则失败重试 ;适用于读多写少的场景。

乐观锁的实现方式 有:

关闭自动提交后,我们需要手动开启事务。

上述就实现了悲观锁,悲观锁就是悲观主义者,它会认为我们在事务A中操作数据1的时候,一定会有事务B来修改数据1,所以,在第2步我们将数据查询出来后直接加上排它锁(X)锁,防止别的事务来修改事务1,直到我们commit后,才释放了排它锁。

MySQL白菜教程(Level 10 - 意向锁&记录锁&间隙锁)

意向锁(Intention Locks; table-level lock) 意向锁是一种特殊的表级锁,意向锁是为了让 InnoDB 多粒度的锁能共存而设计的。取得行的共享锁和排他锁之前需要先取得表的意向共享锁(IS)和意向排他锁(IX),意向共享锁和意向排他锁都是系统自动添加和自动释放的,整个过程无需人工干预

意向锁就是指未来的某一个时刻事务可能要加共享锁或者排它锁,提前声明一个意向,分为两种:

意向共享锁(Intention Shared Lock) IS 事务有意向对表中的某些行加共享锁(S锁)

意向排它锁(Intention Exclusive Lock)IX 事务有意向对表中的某些行加排他锁(X锁)

记录锁(Record Locks) 官方原文

SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE; 这一行则是使用了记录锁,不允许其他事务进行增,删,改 但是SELECT c1 FROM t WHERE c1 = 10; 是没有锁的,走的是快照读,上文已经阐明过了 记录锁本身不是锁定记录数据本身而是锁定索引记录,如果要锁的列没有索引,则会进行全表记录加锁

间隙锁(Gap Locks) 官方原文

比如SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE ; 插入 c1 为 15 的记录会被锁定不可执行 这种默认存在于可重复读的事务隔离级别中的锁,锁定被圈定的范围不允许 insert,防止不可重复读,上文说了我们的事务隔离级别都是读已提交,默认会产生不可重复读的问题

关于MySQL中的表锁和行锁

mysql行锁和表锁

锁是计算机协调多个进程或纯线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所在有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

概述

相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。

MySQL大致可归纳为以下3种锁:

若对本页面资源感兴趣,请点击下方或右方图片,注册登录后

搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源

如有其他疑问,请咨询右下角【在线客服】,谢谢支持!

MySQL 意向锁机制:揭秘数据库事务管理的秘密 第2张

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~
欢迎你第一次访问网站!