gpt4 book ai didi

mysql/aurora 没有立即看到已提交事务的结果

转载 作者:行者123 更新时间:2023-11-29 15:37:23 32 4
gpt4 key购买 nike

在针对 AWS aurora-mysql 数据库运行的系统中,运行以下(显然极其简化)代码。它是一个高度并发的系统(如果重要的话,用java编写),具有多个线程,多个到数据库的连接。我们遇到的问题是当两个线程几乎同时尝试将“abc”插入表中时。

正如预期的那样,如果线程 1 和线程 2 同时启动,线程 2 将在开始时陷入等待“select...for update”语句的状态。一旦线程 1 提交其事务,锁就会被释放,线程 2 继续执行。

问题在于,thread2 从 tbl_foo 中选择的下一行没有返回结果,导致它执行了错误的代码块,尽管它刚刚被插入。事实上,thread2 稍后的插入将由于违反唯一约束而失败,因此它确实“知道”该行在那里。这是 mysql 和/或 aurora 读取缓存的已知问题吗?是否有一些配置设置会改变它?

<start transaction>

SELECT * FROM tbl_user WHERE userID = 123 FOR UPDATE;

SELECT * FROM tbl_foo WHERE fk_user = 123 AND unique_column = 'abc';

if (found row in tbl_foo)
do stuff
else
do different stuff including inserting (123, 'abc') into tbl_foo

<commit transaction>

最佳答案

应该与隔离级别相关

请检查隔离级别。

关于mysql/aurora 没有立即看到已提交事务的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58098918/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com