【发布时间】:2020-08-11 17:14:52
【问题描述】:
我正在尝试了解事务是如何工作的,但我遇到了一个对我来说没有多大意义的场景。我希望有人能帮助我理解它。
我有两笔交易
事务 1
BEGIN; update data set val = val + 1 where id = 1
事务 2
BEGIN; select * from data
我有两个终端打开,我开始第一个事务并运行更新查询。据说这会为 id 为 1 的元组上的事务 1 提供排他锁。
之后,我在提交第一个事务之前在另一个终端中运行第二个查询。我原以为它会停止,因为第一个事务具有排他锁,这将阻止该事务获取 id 为 1 的元组上的读锁。
然而,mysql 运行选择查询并返回“未脏”数据。
谁能给我解释一下mysql这种行为背后的原因?
【问题讨论】:
标签: mysql concurrency transactions rdbms