Innodb存储引擎中的锁

简介: Innodb存储引擎中的锁

锁的类型

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

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

一致性非锁定读

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

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

一致性锁定读

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

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

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

幻读问题

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

相关文章
|
4月前
|
存储 SQL 关系型数据库
Mysql系列-4.Mysql存储引擎-InnoDB(下)
Mysql系列-4.Mysql存储引擎-InnoDB
49 0
|
3月前
|
存储 缓存 关系型数据库
MySQL - 存储引擎MyISAM和Innodb
MySQL - 存储引擎MyISAM和Innodb
|
5月前
|
存储 SQL 关系型数据库
MySQL存储引擎之MyISAM和InnoDB
MySQL存储引擎之MyISAM和InnoDB
49 0
|
3天前
|
存储 人工智能 关系型数据库
10个行锁、死锁案例⭐️24张加锁分析图🚀彻底搞懂Innodb行锁加锁规则!
10个行锁、死锁案例⭐️24张加锁分析图🚀彻底搞懂Innodb行锁加锁规则!
|
2天前
|
存储 算法 关系型数据库
介绍下InnoDB的锁机制?
InnoDB存储引擎的锁分为共享锁(S锁,读锁)和排他锁(X锁,写锁)。共享锁允许多个事务并发读取数据,不允许修改;排他锁允许读取和修改数据,阻止其他事务加锁。SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE分别用于获取共享锁和排他锁。此外,还有意向锁(IX,IS)用于协调行级锁和表级锁的并发问题,意向锁在事务请求锁时自动获取。记录锁锁定索引记录,插入记录锁用于插入操作前的间隙锁定,而AUTO-INC锁确保自增列的有序性。
|
3月前
|
存储 SQL 关系型数据库
Mysql专栏 - mysql、innodb存储引擎、binlog的工作流程
Mysql专栏 - mysql、innodb存储引擎、binlog的工作流程
84 0
|
4月前
|
存储 SQL 算法
Innodb锁机制:Next-Key Lock 浅谈
Innodb锁机制:Next-Key Lock 浅谈
41 0
|
4月前
|
存储 算法 关系型数据库
MySQL相关(八)- innodb行级锁深入剖析
MySQL相关(八)- innodb行级锁深入剖析
49 0
|
4月前
|
存储 算法 关系型数据库
MySQL相关(七)- innodb 锁的介绍及使用
MySQL相关(七)- innodb 锁的介绍及使用
29 0
|
4月前
|
存储 关系型数据库 MySQL
MySQL存储引擎 InnoDB、MyISAM、Memory存储引擎的特点与区别
MySQL存储引擎 InnoDB、MyISAM、Memory存储引擎的特点与区别
59 0