首页 > 解决方案 > Innodb 事务是否阻止读取或排序?

问题描述

我有一个包含许多行的表,其中包含我订购的索引列。我有更新此特定表的单行并更改该索引列的值(以及该行中的一些其他值)的事务

我的问题是:

  1. 如果我在事务更新时尝试读取一行,我可以这样做吗?还是在事务完成之前读取被阻塞?

  2. 我所做的交易专门更新了索引列,我使用“order by”查询对其进行排序。SELECT * ... ORDER BY 查询可以在不被这些事务阻塞的情况下正常运行吗?还是必须等到修改我正在排序的索引列的事务完成?

标签: mysql

解决方案


您正在询问事务的行为,而充分理解系统行为的最佳方法是阅读事务隔离级别并查看数据库正在运行的事务隔离级别。

不过,一般来说,您会发现当一行被更新时,它被排他锁锁定,因此在事务完成之前不可用。

更直接地回答您的问题。

  1. 检查您是否在读取已提交或未提交读取中运行,这可能会有所不同,您是否可以在更新行时读取该行。

    1. 事务隔离级别将同样发挥作用。

推荐阅读