【发布时间】:2018-12-06 08:43:04
【问题描述】:
在默认可重复读隔离级别的Mysql中,
在会话 1 事务 1 中,
start transaction;
update student_details set name='uuu' where dept='mech';
已成功进行更改。此处列“dept”已编入索引。
在会话 2 事务 2 之后,
start transaction;
update student_details set name='kkk' where dept='ece';
此处也已成功进行更改。
但如果我在不索引“dept”列的情况下执行相同操作,则会话 2 中的事务 2 会一直等待,直到会话 1 中的事务 1 提交或回滚。
我知道,在可重复的读取隔离级别下,当我们执行“更新...where...”语句时,正在读取的每一行都被排他锁(写锁)锁定。因此事务 2 等待直到 1 释放它的锁。
那么,当我们索引一列并进行“更新...在哪里..”查询时,究竟会发生什么?为什么索引没有发生同样的事情??
【问题讨论】:
标签: mysql isolation-level