Innodb存储引擎中的锁

简介: Innodb存储引擎中的锁

锁的类型

  • 共享锁(S锁) 允许事务读一行数据
  • 排他锁(X锁) 允许事务删除或者更新一条数据

只要一行数据上了排他锁,那么就不能给他加共享锁,其实也很好理解,只要一个数据加了排他锁,那么这条数据其实就是不可读的状态。

一致性非锁定读

一致性非锁定读是指Innodb存储引擎通过行多版本控制的方式来读取当前执行时间数据库中行的数据,如果读取的是正在delete和update操作,这时读取操作不会因此去等待行上锁的释放,其实,他读取的是行的一个快照数据。

在事务隔离级别为读已提交和可重复读时,数据库就使用的是一致性非锁定读,在读已提交的隔离级别下,读的总是被锁定行的最新一份快照数据,对可重复读的隔离级别下,读的总是事务开始时的行数据版本。

一致性锁定读

在某种情况下,数据库要显示的对数据库读写操作进行加锁控制以保证数据逻辑的一致性,这就要求数据库支持加锁语句,innodb对于select语句支持两种一致性的锁定读

select --- for update
select ---- lock in share mode

场景:对金额操作,可以使用for update,那么这时其他的事务就无法修改这条数据,进行阻塞。在一致性非锁定读的情况下可以使用一致性锁定读的语句,他们并不是互斥的。

幻读问题

Innodb的可重复读可以解决幻读问题,但是oracle因为是读已提交存在幻读问题,解决幻读可以通过间隙锁,或者oracle升级他的隔离级别为服务串行化。

相关文章
|
3月前
|
存储 缓存 关系型数据库
MySQL - 存储引擎MyISAM和Innodb
MySQL - 存储引擎MyISAM和Innodb
|
3月前
|
存储 人工智能 关系型数据库
10个行锁、死锁案例⭐️24张加锁分析图🚀彻底搞懂Innodb行锁加锁规则!
10个行锁、死锁案例⭐️24张加锁分析图🚀彻底搞懂Innodb行锁加锁规则!
|
9天前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
30 6
|
2月前
|
存储 SQL 关系型数据库
【MySQL技术内幕】6.3-InnoDB中的锁
【MySQL技术内幕】6.3-InnoDB中的锁
169 57
|
20天前
|
SQL 关系型数据库 BI
关于InnoDB行锁和4种锁是怎么实现的?
总的来说,InnoDB的行锁机制通过索引来实现对数据行的精确控制,并通过多种锁类型和兼容性规则来处理并发事务中的冲突。开发者需要注意合理使用索引和优化事务处理,以提高数据库的并发性能和稳定性。
|
1月前
|
存储 关系型数据库 MySQL
MySQL InnoDB存储引擎的优点有哪些?
上述提到的特性和优势使得InnoDB引擎非常适合那些要求高可靠性、高性能和事务支持的场景。在使用MySQL进行数据管理时,InnoDB通常是优先考虑的存储引擎选项。
39 0
|
2月前
|
存储 算法 关系型数据库
【MySQL技术内幕】5.7- InnoDB存储引擎中的哈希算法
【MySQL技术内幕】5.7- InnoDB存储引擎中的哈希算法
31 1
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
MySQL数据库——存储引擎(2)-存储引擎特点(InnoDB、MyISAM、Memory)、存储引擎选择
39 1
|
2月前
|
存储 关系型数据库 MySQL
【MySQL技术内幕】5.1-InnoDB存储引擎索引概述
【MySQL技术内幕】5.1-InnoDB存储引擎索引概述
37 0
|
2月前
|
存储 缓存 关系型数据库
【MySQL技术内幕】3.6-InnoDB存储引擎文件
【MySQL技术内幕】3.6-InnoDB存储引擎文件
33 0