MySql innodb的锁
来源:互联网 发布:ug10钻孔编程 编辑:程序博客网 时间:2024/05/20 00:10
MySql innodb中的索引添加到索引上,提供了更细粒度的锁机制。提高并发性能。
Innodb中默认的索引是Next-Key。锁定的不是单个值,而是一个范围。
innodb依据索引的不同会添加不同的锁。
举例:
delete from t1 where id = 10;
Read Commited(X锁:互斥锁)
当id是主键索引时
当id=主键时,此SQL只需要在id=10这条记录上添加X锁即可。
id=唯一索引
由于id不是主键,而是一个Unique的二级索引值,首先将索引unique id加X锁,同时读取主键索引,在主键索引上加X锁。(避免其他的update在主键索引上更新)
id非唯一索引
满足id=10查询条件的记录,都加锁,并且这些记录对应的主键索引的记录上也都加了锁。
id无索引
会锁住整个聚簇索引的记录,无论记录是否满足条件,全部被加上X锁。
MySql实现:如果一个条件无法通过索引快速过滤,那么存储引擎层面就会将所有记录加锁后返回,然后由MySql Server层进行过滤。
MySQL 为了效率,做了优化,对于不满足条件的记录,会在判断后释放锁,最终持有的是满足条件的记录上的锁。
Repeatable Read
id主键
在id主键索引上添加行锁。
id 唯一索引
在唯一索引上添加行锁,同时在聚簇索引上也添加一个X锁(由于唯一的只有一个,因此不需要添加间隙锁)
id 非唯一索引
在id索引上添加锁,在id索引的记录之间添加GAP锁(解决幻读,锁住的是记录之间的间隙)。同时在聚簇索引上添加锁。
id无索引
在整个表的聚簇索引上都会加上Next-Key锁(包括主键锁及间隙锁)。
但MySql做了一些优化,称做semi-consistent read,在semi-consistent开启的情况下,对于不满足查询条件的记录,MySql会提前释放锁。
注:在MySql Innodb中,所谓的读不加锁,并不适用于所有的情况,而是隔离级别相关的,serializable隔离级别,读不加锁就不成立,所有的读操作都是当前读。
阅读全文
0 0
- MySql innodb的锁
- MySQL的InnoDB锁机制
- Mysql锁的问题(InnoDB)
- mysql innodb引擎的锁与事物
- innodb mysql的锁和索引
- 查看mysql之innodb的事务锁
- MySQL innodb的锁机制解读
- MySQL的存储引擎InnoDB间隙锁
- mysql innodb的行级锁和表锁
- mysql innodb的锁机制分析
- Mysql Innodb的事务和锁
- MySQL InnoDB存储引擎下的锁
- mysql中innodb引擎的锁问题
- MySQL innodb的锁机制解读
- MySQL中InnoDB的间隙锁问题
- mysql InnoDB的count(*)
- Mysql Innodb的恢复
- [MySQL] InnoDB锁问题
- 23种设计模式之-----工厂方法模式(Method Factory pattern)
- 十九:集合操作
- (算法分析Week11)Generate Parentheses[Medium]
- 符号三角形问题(回溯)-算法设计与分析
- 数据库完整性约束
- MySql innodb的锁
- /usr/bin/ld: 找不到 -lippicv
- Linux私房菜学习-第6章Linux文件权限与目录
- Springboot No EntityManager with actual transaction available for current thread
- LeetCode.94 Binary Tree Inorder Traversal
- MATLAB内置常见函数
- 回文数判定
- Advanced Programming in UNIX Environment Episode 16
- Visual Studio Code编辑器的实用插件和工作中实用的技巧